如何在SwiftUI中根据条件隐藏视图且保留其占用的布局空间?
SwiftUI 隐藏视图但保留布局空间的最优方案
方案1:扩展hidden修饰符(语义最明确)
SwiftUI 原生的hidden()修饰符本身就会在隐藏视图的同时保留原有布局空间,只是默认不支持条件控制。你可以给View扩展一个带条件参数的hidden方法:
extension View { func hidden(if condition: Bool) -> some View { condition ? self.hidden() : self } }
使用时直接传入判断条件即可,完全没有代码重复:
Text("Test") .hidden(if: number == 1)
方案2:使用opacity修饰符(无需扩展,开箱即用)
如果不想写扩展,也可以直接用透明度控制显隐,透明度为0时视图完全不可见,布局空间和可见时完全一致:
Text("Test") .opacity(number == 1 ? 0 : 1)
补充注意点
如果隐藏后的视图不需要响应点击、手势等交互,可以额外叠加disabled修饰符避免误触:
Text("Test") .hidden(if: number == 1) .disabled(number == 1)
不要通过if-else分支控制视图是否加载,这种写法会让视图从视图树中移除,原有布局空间会被其他视图占用,不符合需求。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

