SnapKit 的自动布局未按预期响应
Posted
技术标签:
【中文标题】SnapKit 的自动布局未按预期响应【英文标题】:Autolayout with SnapKit not responding as expected 【发布时间】:2017-09-25 19:35:29 【问题描述】:只是尝试使用 SnapKit 自动布局添加 UILabel。我使用的代码如下:
override func viewDidLoad()
super.viewDidLoad()
self.view.backgroundColor = .lightGray
let userNameLabel = UILabel()
userNameLabel.text = "Dinesh nagarajan"
userNameLabel.backgroundColor = .white
self.view.addSubview(userNameLabel)
userNameLabel.snp.makeConstraints (make) in
make.top.leading.trailing.height.equalTo(40)
这里我提到了前导和尾随等于 40 的约束。但我得到的结果与代码不同。我附上了图片以供参考上面的代码。为什么它的行为与预期不同...?
【问题讨论】:
运行/调试应用程序时实际的自动布局约束值是多少?它是在右边缘“剪裁”,还是延伸超过边缘?如果您还没有,请使用 Debug View Hierarchy 检查元素。 @DonMag 它在右边缘剪裁。 我不使用 SnapKit,但它看起来 是尾随约束的问题。如果您删除.trailing
部分,并添加第二行显示:make.trailing.equalTo(-40)
会发生什么?
如果我删除尾随约束,它会占用标签的宽度。但如果我添加make.trailing.equalTo(-40)
,标签完全符合预期。
OK - 所以问题是:您首先将.trailing
约束设置为“超级视图的右边缘加上 40 pts”,但您确实需要它是“超级视图的右边缘减去 40 pts”。
【参考方案1】:
userNameLabel.snp.makeConstraints (make) in
make.top.leading.trailing.equalTo(view).inset(40)
make.height.equalTo(40)
似乎是约束本身的问题。如果您使用插图进行定位并设置明确的高度,它应该会更好一些。
【讨论】:
以上是关于SnapKit 的自动布局未按预期响应的主要内容,如果未能解决你的问题,请参考以下文章