You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 16:15:52