在单元格的 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