【发布时间】:2021-09-29 00:40:55
【问题描述】:
我正在尝试保留用于在 iOS 14 中删除列表分隔符的代码,同时为 iOS 15 采用新的 .listRowSeparatorVisibility。
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 和else 块中返回的视图相同时,它可以工作。如果没有,它会崩溃。我不确定这有什么用处
【问题讨论】: