Styling
You can style Voltra components using React Native-style style props. The style prop works with a limited set of React Native properties that are automatically converted to SwiftUI modifiers under the hood.
React Native style prop
Voltra supports a limited subset of React Native style properties. When you pass a style prop to a Voltra component, these properties are automatically converted to SwiftUI modifiers under the hood. This makes it easy to get started if you're familiar with React Native styling.
Supported properties
The following React Native style properties are supported:
Layout:
width- Fixed width (number values only, percentages are ignored)height- Fixed height (number values only, percentages are ignored)flex- Flex shorthand (follows Yoga's behavior). Positive values act asflexGrow, negative values act asflexShrink. ExplicitflexGrow/flexShrinktake precedence if both are specified.flexGrow- Flex grow factor. When > 0, allows the view to grow to fill available space (converts to flexible frame withmaxWidth/maxHeightset to infinity)flexShrink- Flex shrink factor. When > 0, allows the view to shrink below its ideal size (setsminWidth/minHeightto 0)padding- Uniform padding on all edgespaddingTop,paddingBottom,paddingLeft,paddingRight- Individual edge paddingpaddingHorizontal,paddingVertical- Horizontal and vertical paddingmargin,marginTop,marginBottom,marginLeft,marginRight,marginHorizontal,marginVertical- All margin properties are mapped to padding in SwiftUI
Positioning:
offsetX- Horizontal offset from the element's natural position (positive = right, negative = left)offsetY- Vertical offset from the element's natural position (positive = down, negative = up)
Style:
backgroundColor- Background color (hex strings or color names)opacity- Opacity value between 0 and 1borderRadius- Corner radius valueborderWidth- Border widthborderColor- Border color
Shadow:
shadowColor- Shadow colorshadowOffset- Shadow offset ({ width: number, height: number })shadowOpacity- Shadow opacityshadowRadius- Shadow blur radius
Text:
fontSize- Font size (maps tofontmodifier)fontWeight- Font weight (e.g.,'600','bold','regular')fontFamily- Custom font family name (see Custom Fonts section below)color- Text color (maps toforegroundStylemodifier)letterSpacing- Spacing between characters (maps tokerningmodifier)fontVariant- Font variant array (e.g.,['small-caps', 'tabular-nums']). Supported values:'small-caps'- Applies small caps styling (iOS 14+)'tabular-nums'- Applies monospaced digits (iOS 15+)
Effects:
overflow: 'hidden'- Clips content to bounds (maps toclippedmodifier)
Limitations
Properties not listed above are ignored during rendering. This includes common React Native properties like:
- Most flexbox layout properties (
flexDirection,justifyContent,alignItems, etc.) - Note:flex,flexGrow, andflexShrinkare supported gapand spacing properties- Percentage-based widths and heights
- CSS-style positioning (
position,top,left,right,bottom) - Use SwiftUI-native positioning instead (see below) - Most text styling properties beyond
fontSize,fontWeight,fontFamily,color,letterSpacing, andfontVariant
Voltra uses SwiftUI's native positioning model instead of CSS-style absolute/relative positioning:
- Use stack
alignmentprops -ZStack,VStack, andHStackall support analignmentprop that positions all children - Use
offsetX/offsetYstyles - Fine-tune individual element positions with offset
See the Layout & Containers documentation for details on alignment.
Example
Custom Fonts
Voltra supports custom fonts through the fontFamily style property.
Adding Custom Fonts to Your Project
Voltra supports custom fonts in your Live Activities and Widgets through two main methods:
1. Using Voltra's Font Configuration (Recommended)
The simplest way is to specify fonts directly in the Voltra plugin configuration. This follows the same pattern as expo-font:
The fonts array can include:
- Individual font files:
"./assets/fonts/CustomFont.ttf" - Entire directories:
"./assets/fonts"(all fonts in the directory will be included) - Supported formats:
.ttf,.otf,.woff,.woff2
2. Adding Fonts Manually in Xcode
For non-Expo projects or if you prefer manual configuration, you can add fonts directly to your Xcode project:
- Add your font files (
.otfor.ttf) to your Xcode project - Ensure they're included in the Live Activity target's "Copy Bundle Resources" build phase
- Add the font file names to your
Info.plistunder theUIAppFontskey for Live Activity target
For detailed instructions, see Apple's documentation on Applying custom fonts to text.
Using Custom Fonts
Once your fonts are added to the project, you can use them with the fontFamily style property:
The font family name you use in fontFamily should match the font's PostScript name, not the file name. You can find the PostScript name:
- In the Font Book app on macOS
- Using online tools like fontdrop.info
- In Xcode's font picker
For example, the font file Inter-Bold.ttf has the PostScript name Inter-Bold.
Font Weight with Custom Fonts
When using fontFamily, the fontWeight style property is ignored since you typically specify the exact font variant (e.g., Inter-Bold, Inter-Regular). If you need different weights, add multiple font files and specify the complete font name:
Example with Google Fonts
If you're using Google Fonts via @expo-google-fonts, they work seamlessly with Voltra:
If fontFamily is not specified or the font cannot be found, Voltra will fall back to the system font with the specified fontWeight.
