【问题标题】:Add View Outside of ContentView in Cell在单元格的 ContentView 之外添加视图
【发布时间】:2019-04-05 19:13:53
【问题描述】:

我有一个集合视图单元格,我想向它添加一个视图。 Apple 声明应将视图添加到contentView。这是那里的文档:

配置单元格时,您可以将代表单元格内容的任何自定义视图添加到此视图中。单元格对象将此视图中的内容放在任何背景视图的前面。

但是,我似乎也可以在 contentView 之外添加视图,并且没有警告或崩溃。这是我的代码。注意评论QUESTION——我想知道这样做是否可行:

class MyCollectionViewCell: UICollectionViewCell {

    @IBOutlet private var imageView: UIImageView!

    private let titleLabel = UILabel(frame: .zero)

    override func awakeFromNib() {
        super.awakeFromNib()

        // QUESTION: Is this ok? Notice I am not adding the `titleLabel` to `self.contentView`
        self.addSubview(titleLabel)

        let horizontalCenterConstraint = NSLayoutConstraint(item: titleLabel, attribute: .centerX, relatedBy: .equal, toItem: self, attribute: .centerX, multiplier: 1.0, constant: 0)
        let verticalCenterConstraint = NSLayoutConstraint(item: titleLabel, attribute: .centerY, relatedBy: .equal, toItem: self, attribute: .centerY, multiplier: 1.0, constant: 0)

        self.addConstraint(horizontalCenterConstraint)
        self.addConstraint(verticalCenterConstraint)
    }
}

在上面的代码中,我没有使用self.contentView.addSubview... 添加视图,而是简单地使用self.addSubview。这样可以吗?

【问题讨论】:

    标签: ios swift uitableview uicollectionview uicollectionviewcell


    【解决方案1】:

    大多数事情都是可能的,问题是为什么你想这样做?

    如果直接违背 API 作者的建议,您将面临一系列潜在问题的风险。例如

    • 您可能会破坏一些您不知道的东西
    • 您可能会对性能产生不利影响
    • 即使它目前可以工作,但将来可能会损坏,作者没有理由阻止这种情况发生。

    如果您尝试做的事情在其他情况下是不可能的,并且您可以接受风险,那就去做吧。否则,请遵守作者的明确说明。

    【讨论】:

    • 好的,是的,我不确定 Apple 的文档。根据您所说,我应该只将视图添加到单元格的contentView 对吗?
    【解决方案2】:

    是的,我尝试直接添加cell 而不是contentView。现在,奇怪的事情发生了,集合视图无法滚动。我花了 1 个小时才弄清楚我应该将自己添加到 contentView

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      相关资源
      最近更新 更多