Expo GlassEffect
使用 iOS 原生 UIVisualEffectView 渲染液态玻璃效果的 React 组件。
重要
GlassView仅在 iOS 26 及以上版本可用。在不支持的平台上,它将回退到常规的View。
使用 UIVisualEffectView 渲染原生 iOS 液态玻璃效果的 React 组件。支持可自定义的玻璃样式和色调颜色。
🌐 React components that render native iOS liquid glass effect using UIVisualEffectView. Supports customizable glass styles and tint color.
已知的问题
🌐 Known issues
isInteractive属性只能在挂载时设置一次,组件渲染后无法动态更改。如果需要切换交互行为,必须使用不同的key重新挂载组件。- 避免在
GlassView或其父视图上使用小于1的opacity值,因为这会导致效果渲染不正确。请改用glassEffectStyle中的animate和animationDuration属性来淡入/淡出效果。更多信息,请参阅 Apple 文档 和 GitHub 问题 #41024。
安装
🌐 Installation
- npx expo install expo-glass-effectIf you are installing this in an existing React Native app, make sure to install expo in your project.
用法
🌐 Usage
GlassView
GlassView 组件呈现原生 iOS 玻璃效果。它支持不同的玻璃效果样式,并且可以通过着色颜色进行自定义,以满足各种美学需求。
🌐 The GlassView component renders the native iOS glass effect. It supports different glass effect styles and can be customized with tint colors for various aesthetic needs.
import { StyleSheet, View, Image } from 'react-native'; import { GlassView } from 'expo-glass-effect'; export default function App() { return ( <View style={styles.container}> <Image style={styles.backgroundImage} source={{ uri: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=400&fit=crop', }} /> {/* Basic Glass View */} <GlassView style={styles.glassView} /> {/* Glass View with clear style */} <GlassView style={styles.tintedGlassView} glassEffectStyle="clear" /> </View> ); } const styles = StyleSheet.create({ container: { flex: 1, }, backgroundImage: { ...StyleSheet.absoluteFill, width: '100%', height: '100%', }, glassView: { position: 'absolute', top: 100, left: 50, width: 200, height: 100, borderRadius: 12, justifyContent: 'center', alignItems: 'center', padding: 20, }, tintedGlassView: { position: 'absolute', top: 250, left: 50, width: 200, height: 100, borderRadius: 12, justifyContent: 'center', alignItems: 'center', padding: 20, }, text: { fontSize: 16, fontWeight: '600', color: '#000', textAlign: 'center', }, });
GlassContainer
GlassContainer 组件允许你将多个玻璃视图组合成一个整体效果。
🌐 The GlassContainer component allows you to combine multiple glass views into a combined effect.
import { StyleSheet, View, Image } from 'react-native'; import { GlassView, GlassContainer } from 'expo-glass-effect'; export default function GlassContainerDemo() { return ( <View style={styles.container}> <Image style={styles.backgroundImage} source={{ uri: 'https://images.unsplash.com/photo-1547036967-23d11aacaee0?w=400&h=600&fit=crop', }} /> <GlassContainer spacing={10} style={styles.containerStyle}> <GlassView style={styles.glass1} isInteractive /> <GlassView style={styles.glass2} /> <GlassView style={styles.glass3} /> </GlassContainer> </View> ); } const styles = StyleSheet.create({ container: { flex: 1, }, backgroundImage: { ...StyleSheet.absoluteFillObject, width: '100%', height: '100%', }, containerStyle: { position: 'absolute', top: 200, left: 50, width: 250, height: 100, flexDirection: 'row', alignItems: 'center', gap: 5, }, glass1: { width: 60, height: 60, borderRadius: 30, }, glass2: { width: 50, height: 50, borderRadius: 25, }, glass3: { width: 40, height: 40, borderRadius: 20, }, });
isLiquidGlassAvailable
isLiquidGlassAvailable 函数允许你检查编译后的应用中是否可用 Liquid Glass 效果。它会验证系统和编译器版本,以及 Info.plist 设置。
🌐 The isLiquidGlassAvailable function let's you check, if the Liquid Glass effect is available in the compiled application.
It validates the system and compiler versions, as well as the Info.plist settings.
import { isLiquidGlassAvailable } from 'expo-glass-effect'; export default function CheckLiquidGlass() { return ( <Text> {isLiquidGlassAvailable() ? 'Liquid Glass effect is available' : 'Liquid Glass effect is not available'} </Text> ); }
isGlassEffectAPIAvailable
isGlassEffectAPIAvailable 函数用于检查设备在运行时是否可以使用 Liquid Glass API。
🌐 The isGlassEffectAPIAvailable function checks whether the Liquid Glass API is available at runtime on the device.
警告 添加此 API 是因为某些 iOS 26 测试版没有可用的 Liquid Glass API,这可能导致崩溃。在你的应用中使用
GlassView之前,你应先检查以确保兼容性。更多信息,请参见 GitHub issue #40911。
import { isGlassEffectAPIAvailable } from 'expo-glass-effect'; export default function CheckGlassEffectAPI() { return ( <Text> {isGlassEffectAPIAvailable() ? 'Glass Effect API is available' : 'Glass Effect API is not available'} </Text> ); }
应用接口
🌐 API
import { GlassView, GlassContainer, isLiquidGlassAvailable, isGlassEffectAPIAvailable, } from 'expo-glass-effect';
Components
Type: React.Element<GlassContainerProps>
Type: React.Element<GlassViewProps>
GlassStyle • Default: 'regular'Glass effect style to apply to the view.
boolean • Default: falseWhether the glass effect should be interactive.
Methods
Indicates whether the app is using the Liquid Glass design. The value will be true when the
Liquid Glass components are available in the app.
This only checks for component availability. The value may also be true if the user has enabled
accessibility settings that limit the Liquid Glass effect.
To check if the user has disabled the Liquid Glass effect via accessibility settings, use
AccessibilityInfo.isReduceTransparencyEnabled().
boolean