我想在后缘使用默认的填充,但只有在条件为真的情况下。对我来说,使用默认的填充而不是一个值是很重要的,这样SwiftUI就可以为我设置它。这是我当前使用三元运算符的设置:
MyView() .padding(condition ? .trailing : /* what here?*/)
使用nil或.none不起作用,并将给予我一个错误有什么想法吗?
yeotifhr1#
padding的length参数的documentation表示:如果将该值设置为nil,则SwiftUI将使用平台特定的默认金额。因此,您可以始终指定一个尾随填充,但将长度设置为nil以获得默认值,将长度设置为0以不填充:
padding
length
nil
0
MyView() .padding(.trailing, condition ? nil : 0)
g52tjvyc2#
在简单的情况下,您可以只设置零或任何其他您需要的默认值:)
.padding(condition ? .trailing : 0)
但是如果需要按条件应用修饰符,可以使用View扩展和if方法(更多细节here):
View
if
extension View { @ViewBuilder func `if`<Content: View>(_ condition: Bool, transform: (Self) -> Content) -> some View { if condition { transform(self) } else { self } } }
然后在代码中:
MyView() .if(condition) { $0.padding(.trailing) }
voj3qocg3#
因为padding的参数可以使用 * 类似数组 / 类似选项集 * 语法指定
.padding([.trailing])
你可以简单地写
.padding(condition ? .trailing : [])
70gysomp4#
你可以使用if语句。如果你不想使用if语句,你可以使用视图修饰符。下面是视图修改器的代码:
struct MyPadding: ViewModifier { var condition: Bool func body(content: Content) -> some View { if condition{ content .padding(.trailing) } else { content } } init(condition: Bool) { self.condition = condition } }
您可以添加一个扩展来查看,以使用这个更容易:
extension View{ func IfPadding(condition: Bool){ -> some View modifier(MyPadding(condition: condition)) } }
下面是如何使用它:
struct ContentView: View{ var body: some View{ Text("Hello, World!") .IfPadding(condition: true) } }
4条答案
按热度按时间yeotifhr1#
padding
的length
参数的documentation表示:如果将该值设置为nil,则SwiftUI将使用平台特定的默认金额。因此,您可以始终指定一个尾随填充,但将长度设置为
nil
以获得默认值,将长度设置为0
以不填充:g52tjvyc2#
在简单的情况下,您可以只设置零或任何其他您需要的默认值:)
但是如果需要按条件应用修饰符,可以使用
View
扩展和if
方法(更多细节here):然后在代码中:
voj3qocg3#
因为
padding
的参数可以使用 * 类似数组 / 类似选项集 * 语法指定你可以简单地写
70gysomp4#
你可以使用if语句。如果你不想使用if语句,你可以使用视图修饰符。
下面是视图修改器的代码:
您可以添加一个扩展来查看,以使用这个更容易:
下面是如何使用它: