我有一个 UICollectionView,我正在尝试使用 SwiftUI 设计我的 UICollectionViewCell。我见过两个示例,one 和 two,它们在 UICollectionViewCell 中通过以下方式完成了此操作:
let controller = UIHostingController(rootView: SomeSwiftUIView)
let view = controller.view!
view.translatesAutoresizingMaskIntoConstraints = false
addSubview(view)
NSLayoutConstraint.activate([
view.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
view.topAnchor.constraint(equalTo: contentView.topAnchor),
view.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
view.bottomAnchor.constraint(equalTo: contentView.bottomAnchor)
])
这在视觉上效果很好,但我遇到的一个问题是我没有与 SwiftUI 视图进行用户交互。例如,如果我在 SwiftUI 视图中有一个按钮,则当您点击该按钮时不会执行该操作。如果列表位于 SwiftUI 视图中,则无法滚动该视图。 (我并不是想在其中放入一个列表,这只是一个例子)
关于从这里去哪里有什么建议吗?谢谢!
我通过将视图限制在单元格而不是 contentView 上解决了这个问题,现在工作正常。
NSLayoutConstraint.activate([
view.leadingAnchor.constraint(equalTo: leadingAnchor),
view.topAnchor.constraint(equalTo: topAnchor),
view.trailingAnchor.constraint(equalTo: trailingAnchor),
view.bottomAnchor.constraint(equalTo: bottomAnchor)
])
正如我怀疑的那样,这是一个分层问题。
您直接将视图添加到单元格并在 contentView 上设置约束。
当您将视图添加到内容视图时,它将按预期工作,因此如果我们只需将第 4 行更改为
contentView.addSubview(view)
,那么查看您的代码,就像这样它会变成:
let controller = UIHostingController(rootView: SomeSwiftUIView)
let view = controller.view!
view.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(view)
NSLayoutConstraint.activate([
view.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
view.topAnchor.constraint(equalTo: contentView.topAnchor),
view.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
view.bottomAnchor.constraint(equalTo: contentView.bottomAnchor)
])