我正在尝试保留用于在 iOS 14 中删除列表分隔符的代码,同时采用.listRowSeparatorVisibility
适用于 iOS 15 的新版本。
extension View {
func listRowModifier(color: Color) -> some View {
let view = self
.frame(maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .leading)
.background(color)
if #available(iOS 15, *) {
return AnyView(
view
.listRowSeparatorVisibility(.hidden)
.listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
)
} else {
return AnyView(
view
.listRowInsets(EdgeInsets(top: -1, leading: 0, bottom: -1, trailing: 0))
)
}
}
}
这崩溃了EXC_BAD_ACCESS
#0 0x0000000186e84214 in swift_getOpaqueTypeMetadata ()
#1 0x0000000100dc2b50 in View.listRowModifier(color:) ()
视图中这一行的崩溃:
List {
Spacer().frame(height: headerHeight + Theme.unit(2)).listRowModifier()
...
}
我尝试过的其他事情:
- 改用 @ViewBuilder 也会崩溃
- 直接在视图中执行 if else 而不是使用扩展,也会崩溃
**更新**
当if
andelse
块中返回的视图相同时,它可以工作。如果没有,它会崩溃。我不确定这有什么用,考虑到这一点的全部意义在于观点不同,因为一个具有另一个没有的功能......