SwiftUI中如何根据条件为视图应用模糊效果
SwiftUI 条件应用模糊效果实现方案
你完全不需要通过if/else重复编写两份相同的视图代码,有更简洁、性能更好的实现方式:
- 基础场景直接用三目运算符控制模糊半径:不需要模糊时将半径设为0即可,SwiftUI在半径为0时不会执行模糊渲染,无额外性能开销
VStack { // 视图内部内容 } .blur(radius: shouldBlur ? 20 : 0)
- 项目中多处使用时,可以抽成可复用的视图修饰符,简化调用逻辑:
struct ConditionalBlur: ViewModifier { let enable: Bool let radius: CGFloat let opaque: Bool func body(content: Content) -> some View { content .blur(radius: enable ? radius : 0, opaque: opaque) } } extension View { func blur(when enable: Bool, radius: CGFloat, opaque: Bool = false) -> some View { modifier(ConditionalBlur(enable: enable, radius: radius, opaque: opaque)) } }
调用时语义更清晰:
VStack { // 视图内部内容 } .blur(when: shouldBlur, radius: 20)
相比if/else分支的实现方式,上述方案不会触发SwiftUI的视图销毁重建流程,能完整保留视图内部状态,比如输入框焦点、列表滚动位置、正在执行的动画状态都不会因为模糊开关被重置,体验更流畅。
内容的提问来源于stack exchange,提问作者Jasjeev
相关产品推荐
相关产品推荐

