Image
A SwiftUI Image component for displaying SF Symbols. Also called Icon (Universal).
Expo UI Image displays SF Symbols using the SwiftUI Image API. SF Symbols are a library of configurable symbols provided by Apple.
Usage
Basic SF Symbol
import { Host, Image } from '@expo/ui/swift-ui';
export default function BasicImageExample() {
return (
<Host style={{ flex: 1 }}>
<Image systemName="star.fill" />
</Host>
);
}Custom SF Symbol
Use the assetName prop to display a custom SF Symbol imported into the app asset catalog as a symbol set.
import { Host, Image } from '@expo/ui/swift-ui';
export default function CustomImageExample() {
return (
<Host matchContents>
<Image assetName="acme.mark" />
</Host>
);
}With size and color
import { Host, HStack, Image } from '@expo/ui/swift-ui';
export default function ImageSizeColorExample() {
return (
<Host style={{ flex: 1 }}>
<HStack spacing={16}>
<Image systemName="heart.fill" size={24} color="red" />
<Image systemName="star.fill" size={32} color="orange" />
<Image systemName="bell.fill" size={40} color="blue" />
</HStack>
</Host>
);
}With variable value
Some SF Symbols alter their appearance based on a variable value. Use the variableValue prop with a value between 0.0 and 1.0 to control the rendered symbol. Requires iOS 16.0+ and SF Symbols 4.0+.
import { Host, HStack, Image } from '@expo/ui/swift-ui';
export default function ImageVariableExample() {
return (
<Host style={{ flex: 1 }}>
<HStack spacing={16}>
<Image
systemName="chart.bar.fill"
size={32}
variableValue={0.3}
/>
<Image
systemName="chart.bar.fill"
size={32}
variableValue={0.6}
/>
<Image
systemName="chart.bar.fill"
size={32}
variableValue={1.0}
/>
</HStack>
</Host>
);
}With symbol effect
Apply an SF Symbol effect to animate the symbol by passing a symbolEffect modifier from @expo/ui/swift-ui/modifiers. This effect runs continuously by default. You can also pass value for a discrete trigger that fires once per change, or isActive for a boolean toggle that runs the effect while true. Requires iOS 17.0 and later.
import { Host, Image } from '@expo/ui/swift-ui';
import { symbolEffect } from '@expo/ui/swift-ui/modifiers';
export default function ImageSymbolEffectExample() {
return (
<Host style={{ flex: 1 }}>
<Image
systemName="wifi"
size={48}
color="blue"
modifiers={[
symbolEffect({
effect: 'variableColor',
fillStyle: 'iterative',
playbackStyle: 'reversing',
}),
]}
/>
</Host>
);
}The following example uses value to play bounce on each button press. Write to state.value from a worklet (or via scheduleOnUI) to trigger the effect.
import {
Button,
Host,
Image,
useNativeState,
VStack,
} from '@expo/ui/swift-ui';
import { symbolEffect } from '@expo/ui/swift-ui/modifiers';
import { scheduleOnUI } from 'react-native-worklets';
export default function ImageSymbolEffectValueExample() {
const trigger = useNativeState(0);
return (
<Host style={{ flex: 1 }}>
<VStack spacing={16}>
<Image
systemName="bell.fill"
size={48}
color="orange"
modifiers={[
symbolEffect(
{ effect: 'bounce', direction: 'up' },
{ value: trigger }
),
]}
/>
<Button
label="Bounce"
onPress={() =>
scheduleOnUI(() => {
'worklet';
trigger.value = trigger.value + 1;
})
}
/>
</VStack>
</Host>
);
}The following example uses isActive to toggle a continuous breathe animation.
import {
Host,
Image,
SyncToggle,
useNativeState,
VStack,
} from '@expo/ui/swift-ui';
import { symbolEffect } from '@expo/ui/swift-ui/modifiers';
export default function ImageSymbolEffectIsActiveExample() {
const isActive = useNativeState(true);
return (
<Host style={{ flex: 1 }}>
<VStack spacing={16}>
<Image
systemName="cloud.fill"
size={48}
color="cyan"
modifiers={[
symbolEffect({ effect: 'breathe' }, { isActive }),
]}
/>
<SyncToggle label="Breathe" isOn={isActive} />
</VStack>
</Host>
);
}API
import { Image } from '@expo/ui/swift-ui';Component
Image
Type: React.Element<ImageProps>
ImageProps
assetName
Optional • Type: string
The asset catalog name of a custom SF Symbol imported as a symbol set.
color
Optional • Type: ColorValue
The color of the system image. Can be a color name like '#ff00ff', 'red', 'blue', etc.
onPress
Optional • Type: () => void
Callback triggered when the view is pressed.
size
Optional • Type: number
The fixed size of the system image in points. Does not scale with Dynamic Type. Use the font modifier with textStyle for that. Ignored when a font modifier is supplied.
systemName
Optional • Type: SFSymbols7_0
The name of the system image (SF Symbol). For example: 'photo', 'heart.fill', 'star.circle'
uiImage
Optional • Type: string
The URI of the local image file to display. For example: 'file:///path/to/image.jpg' Performs a synchronous read operation that blocks the main thread.
Modifiers
Use these modifiers in the modifiers prop of the SwiftUI and Universal version.
Modifiers for Image
Modifiers for any view
accessibilityAddTraitsaccessibilityElementaccessibilityHiddenaccessibilityHintaccessibilityIdentifieraccessibilityInputLabelsaccessibilityLabelaccessibilityRemoveTraitsaccessibilityValueactivityBackgroundTintalignmentGuideallowsTighteninganimationaspectRatiobackgroundbackgroundOverlayblurboldborderbrightnessclippedclipShapecolorInvertcontainerBackgroundcontainerRelativeFrameiOS 17+containerShapecontentShapecontentTransitioniOS 16+contrastcornerRadiuscreateModifierdisableddynamicTypeSizeenvironmentfixedSizefontforegroundColorforegroundStyleframegeometryGroupiOS 17+glassEffectglassEffectIdgrayscalegridCellAnchoriOS 16+gridCellColumnsgridCellUnsizedAxesgridColumnAlignmentiOS 16+hiddenhueRotationidignoreSafeAreaimageScaleinvalidatableContentiOS 17+italickerninglayoutPrioritylineHeightiOS 26+lineLimitlineSpacingluminanceToAlphamaskmatchedGeometryEffectminimumScaleFactormonospacedDigitmultilineTextAlignmentoffsetonAppearonDisappearonGeometryChangeonLongPressGestureonTapGestureopacityoverlaypaddingprivacySensitiveredactedrotation3DEffectrotationEffectsaturationscaleEffectshadowstrikethroughstrokeBordertextCasetinttruncationModeunderlineunredactedwidgetURLzIndex
Sources
The original Expo docs for this page:
- Image (SwiftUI) (
source-of-truth/versions/v57.0.0/sdk/ui/swift-ui/image.md) - Image (Universal) (
source-of-truth/versions/v57.0.0/sdk/ui/universal/icon.md)