如何为自定义ViewModifier添加条件阴影显示控制?
实现带条件控制的阴影ViewModifier
你只需要给你的ConditionalShadowModifier添加一个控制显示的条件属性,然后基于这个属性来决定阴影的样式(或者是否添加阴影),以下是两种可行的实现方案:
方案一:通过颜色透明度控制(完善原有思路)
直接在Modifier中声明一个布尔类型的属性,用来控制阴影是否显示,代码如下:
struct ConditionalShadowModifier: ViewModifier { // 添加控制阴影显示的条件属性 let shouldShowShadow: Bool func body(content: Content) -> some View { content .shadow( color: shouldShowShadow ? Color.black.opacity(0.2) : Color.clear, radius: 10 ) } } // 扩展View,让调用更简洁 extension View { func conditionalShadow(shouldShow: Bool) -> some View { self.modifier(ConditionalShadowModifier(shouldShowShadow: shouldShow)) } }
使用示例:
Text("Hello World") .conditionalShadow(shouldShow: true) // 显示阴影 // .conditionalShadow(shouldShow: false) // 隐藏阴影
方案二:条件判断是否应用阴影修饰符(更高效)
如果不想在隐藏时添加透明阴影,可以直接通过条件判断来决定是否应用shadow修饰符,避免无意义的修饰符开销:
struct ConditionalShadowModifier: ViewModifier { let shouldShowShadow: Bool func body(content: Content) -> some View { if shouldShowShadow { content .shadow(color: Color.black.opacity(0.2), radius: 10) } else { content } } } // 同样添加View扩展简化调用 extension View { func conditionalShadow(shouldShow: Bool) -> some View { self.modifier(ConditionalShadowModifier(shouldShowShadow: shouldShow)) } }
两种方案都能满足需求,方案二更适合对性能有要求的场景,因为不会额外添加无意义的修饰符。
内容的提问来源于stack exchange,提问作者Herlandro Hermogenes
相关产品推荐
相关产品推荐

