编程约束在 UICollectionViewCell Swift 中不起作用
Posted
技术标签:
【中文标题】编程约束在 UICollectionViewCell Swift 中不起作用【英文标题】:Programatically constraint doesn't work inside UICollectionViewCell Swift 【发布时间】:2019-02-06 09:39:56 【问题描述】:我尝试在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
,视图确实出现了。
【问题讨论】:
【参考方案1】:这解决它只需要设置
view.translatesAutoresizingMaskIntoConstraints = false
不是内容视图
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),
])
【讨论】:
【参考方案2】:尝试改变
self.contentView.translatesAutoresizingMaskIntoConstraints = false
到:
view.translatesAutoresizingMaskIntoConstraints = false
您想关闭您的view
的translatesAutoresizingMaskIntoConstraints
,因为我们要对其应用autolayout
。
【讨论】:
【参考方案3】:第一:你不应该调用layoutIfNeeded
方法,在你改变规则(约束)后,自动布局循环会为你做这个
第二个:你应该将要布局的视图的translatesAutoresizingMaskIntoConstraints
属性设置为false
,所以你不应该这样做
self.contentView.translatesAutoresizingMaskIntoConstraints = false
但你应该这样做
view.translatesAutoresizingMaskIntoConstraints = false
这是因为自动调整大小的蒙版约束应用于您的
view
,并带有您设置的约束。这可能并且可能会导致约束中断。
如果这没有帮助,则提供带有自动布局错误的控制台输出。
【讨论】:
注意到了。layoutIfNeeded
的事情非常重要,谢谢伙计以上是关于编程约束在 UICollectionViewCell Swift 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式创建 UICollectionViewCell