在单元格的 ContentView 之外添加视图

Posted

技术标签:

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

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

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

https://developer.apple.com/documentation/uikit/uicollectionviewcell/1620133-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。这样可以吗?

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

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

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

【讨论】:

以上是关于在单元格的 ContentView 之外添加视图的主要内容,如果未能解决你的问题,请参考以下文章

contentView 在 iOS 6 UITableViewCell 原型单元格中没有缩进

通过 xib 或 storyboard 将子视图添加到 UICollectionViewCell 的 contentView

来自 contentView 子视图的 UITableViewCell

iPhone:向 Cell ContentView 添加子视图会在滚动时覆盖单元格文本

动画时 UITableView 剪辑到边界

删除时的 UITableViewCell 不会移动 UITableViewCell 的 contentView