0

我正在尝试保留用于在 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()
  ...
}

我尝试过的其他事情:

  1. 改用 @ViewBuilder 也会崩溃
  2. 直接在视图中执行 if else 而不是使用扩展,也会崩溃

**更新**

ifandelse块中返回的视图相同时,它可以工作。如果没有,它会崩溃。我不确定这有什么用,考虑到这一点的全部意义在于观点不同,因为一个具有另一个没有的功能......

4

1 回答 1

0

解决了

问题是.listRowSeparatorVisibility在 iOS 15 中已弃用。我将其更改为.listRowSeparator并停止崩溃。

这一点都不清楚,但我会把它留在这里,以防其他人遇到这个问题。

于 2021-07-21T16:53:10.843 回答