UICollectionViewCell 中的 SwiftUI 视图

问题描述 投票:0回答:2

我有一个 UICollectionView,我正在尝试使用 SwiftUI 设计我的 UICollectionViewCell。我见过两个示例,onetwo,它们在 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 视图中,则无法滚动该视图。 (我并不是想在其中放入一个列表,这只是一个例子)

关于从这里去哪里有什么建议吗?谢谢!

swift uicollectionview swiftui ios14 xcode12
2个回答
1
投票

我通过将视图限制在单元格而不是 contentView 上解决了这个问题,现在工作正常。

NSLayoutConstraint.activate([
    view.leadingAnchor.constraint(equalTo: leadingAnchor),
    view.topAnchor.constraint(equalTo: topAnchor),
    view.trailingAnchor.constraint(equalTo: trailingAnchor),
    view.bottomAnchor.constraint(equalTo: bottomAnchor)
])

正如我怀疑的那样,这是一个分层问题。


0
投票

您直接将视图添加到单元格并在 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)
])
© www.soinside.com 2019 - 2024. All rights reserved.