编程约束在 UICollectionViewCell 中不起作用 Swift
Programatically constraint doesn't work inside UICollectionViewCell Swift
我试图在 UICollectionViewCell
中创建一个编程视图,我认为将 "programatically view code" 放在 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
,视图确实出现了。
This Solve it just needs to set
view.translatesAutoresizingMaskIntoConstraints = false
not The 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),
])
}
努力改变
self.contentView.translatesAutoresizingMaskIntoConstraints = false
到:
view.translatesAutoresizingMaskIntoConstraints = false
您想要关闭 view
的 translatesAutoresizingMaskIntoConstraints
,因为我们要对其应用 autolayout
。
首先:你不应该调用layoutIfNeeded
方法,自动布局循环会在你改变规则(约束)后为你做这件事
其次:要布局的视图应该设置translatesAutoresizingMaskIntoConstraints
属性到false
,所以你不应该这样做这个
self.contentView.translatesAutoresizingMaskIntoConstraints = false
但你应该这样做
view.translatesAutoresizingMaskIntoConstraints = false
That's because autoresizing mask constraints are applied to your view
with constraints that you've set. This may and probably will cause constraints break.
如果这没有帮助,则提供带有自动布局错误的控制台输出。
我试图在 UICollectionViewCell
中创建一个编程视图,我认为将 "programatically view code" 放在 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
,视图确实出现了。
This Solve it just needs to set
view.translatesAutoresizingMaskIntoConstraints = false
not The 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),
])
}
努力改变
self.contentView.translatesAutoresizingMaskIntoConstraints = false
到:
view.translatesAutoresizingMaskIntoConstraints = false
您想要关闭 view
的 translatesAutoresizingMaskIntoConstraints
,因为我们要对其应用 autolayout
。
首先:你不应该调用layoutIfNeeded
方法,自动布局循环会在你改变规则(约束)后为你做这件事
其次:要布局的视图应该设置translatesAutoresizingMaskIntoConstraints
属性到false
,所以你不应该这样做这个
self.contentView.translatesAutoresizingMaskIntoConstraints = false
但你应该这样做
view.translatesAutoresizingMaskIntoConstraints = false
That's because autoresizing mask constraints are applied to your
view
with constraints that you've set. This may and probably will cause constraints break.
如果这没有帮助,则提供带有自动布局错误的控制台输出。