如何在SwiftUI中更改分隔符的宽度?
在我的SwiftUI应用程序的几个屏幕上,我在几个元素之间使用了Divider()。此分隔线渲染为非常细的灰色(或黑色?)线。我猜是1分。如何更改分隔符()的宽度?您可以创建任何想要的分隔符、颜色、宽度、内容。。。如下例所示如何在SwiftUI中更改分隔符的宽度?,swiftui,Swiftui,在我的SwiftUI应用程序的几个屏幕上,我在几个元素之间使用了Divider()。此分隔线渲染为非常细的灰色(或黑色?)线。我猜是1分。如何更改分隔符()的宽度?您可以创建任何想要的分隔符、颜色、宽度、内容。。。如下例所示 struct ExDivider: View { let color: Color = .gray let width: CGFloat = 2 var body: some View { Rectangle()
struct ExDivider: View {
let color: Color = .gray
let width: CGFloat = 2
var body: some View {
Rectangle()
.fill(color)
.frame(height: width)
.edgesIgnoringSafeArea(.horizontal)
}
}
对于任何感兴趣的人,我修改了已接受的答案,支持水平和垂直方向,并使用了支持暗模式的原始分隔颜色:
struct ExtendedDivider: View {
var width: CGFloat = 2
var direction: Axis.Set = .horizontal
@Environment(\.colorScheme) var colorScheme
var body: some View {
ZStack {
Rectangle()
.fill(colorScheme == .dark ? Color(red: 0.278, green: 0.278, blue: 0.290) : Color(red: 0.706, green: 0.706, blue: 0.714))
.applyIf(direction == .vertical) {
$0.frame(width: width)
.edgesIgnoringSafeArea(.vertical)
} else: {
$0.frame(height: width)
.edgesIgnoringSafeArea(.horizontal)
}
}
}
}
另外,此代码段使用了applyIf
语法:
extension View {
@ViewBuilder func applyIf<T: View>(_ condition: @autoclosure () -> Bool, apply: (Self) -> T, else: (Self) -> T) -> some View {
if condition() {
apply(self)
} else {
`else`(self)
}
}
}
扩展视图{
@ViewBuilder func applyIf(u)条件:@autoclosure()->Bool,apply:(Self)->T,else:(Self)->T)->一些视图{
如果条件(){
应用(自我)
}否则{
`else`(self)
}
}
}
这对我很有用:
Divider().frame(maxWidth: 100)
这大约是iPhone 11在纵向模式下屏幕宽度的三分之一。好的,我明白了。所以并没有修改器来更改默认分隔符()的宽度,但我可以创建一个自定义分隔符(如您的示例中所示)并使用它来代替它?谢谢!:)如果您想使用具有不同颜色或宽度的自定义修改器,您需要将“let”替换为“var”。您可以使用
。frame(width:)
这是用于iOS14+的吗?我在项目中使用它,需要IOS13+和MacOS10.15+