我试图在UICollectionViewCell
内部进行程序化查看,我认为将“以编程方式查看的代码”放在UICollectionViewCell
中是明智的。
这是我的代码:
override func awakeFromNib() {
super.awakeFromNib()
let view = UIView()
view.frame = CGRect.zero
view.backgroundColor = UIColor.black
self.contentView.addSubview(view)
self.contentView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
view.topAnchor.constraint(equalTo: self.contentView.topAnchor, constant: 0),
view.bottomAnchor.constraint(equalTo: self.contentView.bottomAnchor, constant: 0),
view.trailingAnchor.constraint(equalTo: self.contentView.trailingAnchor, constant: 25),
view.leadingAnchor.constraint(equalTo: self.contentView.leadingAnchor, constant: 25),
])
self.contentView.layoutIfNeeded()
}
我想知道为什么自动布局不起作用,相反,如果我使用手动CGRect
,则视图确实出现了。
答案 0 :(得分:1)
此解决方案只需设置
view.translatesAutoresizingMaskIntoConstraints = false
不是contenView
override func awakeFromNib() {
super.awakeFromNib()
let view = UIView()
view.frame = CGRect.zero
view.backgroundColor = UIColor.black
self.contentView.addSubview(view)
view.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
view.topAnchor.constraint(equalTo: self.contentView.topAnchor, constant: 0),
view.bottomAnchor.constraint(equalTo: self.contentView.bottomAnchor, constant: 0),
view.trailingAnchor.constraint(equalTo: self.contentView.trailingAnchor, constant: 25),
view.leadingAnchor.constraint(equalTo: self.contentView.leadingAnchor, constant: 25),
])
}
答案 1 :(得分:1)
尝试更改
self.contentView.translatesAutoresizingMaskIntoConstraints = false
至:
view.translatesAutoresizingMaskIntoConstraints = false
您想关闭translatesAutoresizingMaskIntoConstraints
中的view
,因为我们要对其应用autolayout
。
答案 2 :(得分:1)
首先:您不应调用layoutIfNeeded
方法,更改规则(约束)后,自动布局循环将为您完成此操作
第二步:您应该为将要布局的视图将translatesAutoresizingMaskIntoConstraints
属性设置为false
,所以不要这样做
self.contentView.translatesAutoresizingMaskIntoConstraints = false
但是您应该这样做
view.translatesAutoresizingMaskIntoConstraints = false
这是因为自动调整大小的遮罩约束已通过您设置的约束应用于
view
。这可能并可能会导致约束破坏。
如果这没有帮助,则为控制台输出提供自动布局错误。