【问题标题】:Autolayout with SnapKit not responding as expectedSnapKit 的自动布局未按预期响应
【发布时间】: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”。

标签: ios swift autolayout snapkit


【解决方案1】:
userNameLabel.snp.makeConstraints { (make) in
    make.top.leading.trailing.equalTo(view).inset(40)
    make.height.equalTo(40)
}

似乎是约束本身的问题。如果您使用插图进行定位并设置明确的高度,它应该会更好一些。

【讨论】:

    猜你喜欢
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多