【问题标题】:Swift, constraint, UILabel, anchor right斯威夫特,约束,UILabel,锚权
【发布时间】:2017-01-25 16:34:28
【问题描述】:

想要的……

由于某种原因,以下不起作用:

extension UIView {
    func addWordOnRight() {
        let l = UILabel()

        //l.frame = self.bounds ..?

        l.textAlignment = .right
        l.text = "blah"

        self.addSubview(l)

        let m = self.layoutMarginsGuide
        l.trailingAnchor.constraint(equalTo: m.trailingAnchor, constant: 0).isActive = true
        l.centerYAnchor.constraint(equalTo: m.centerYAnchor, constant: 0).isActive = true
    }
}

如果你 l.frame = self.bounds,它会神秘地锚定在左边,而不是右边。

【问题讨论】:

  • 您没有收到带有该代码的自动布局警告吗?框架和约束冲突。通过添加l.translatesAutoresizingMaskIntoConstraints = false(不设置框架)我得到你想要的布局。
  • 捂脸!啊,你太棒了@JamesP。为什么不把它作为答案,它会帮助别人,你应该得到荣誉/积分! :)
  • 哈哈,我不知道会这么简单。
  • “对你来说很简单”:)

标签: ios swift3 nslayoutconstraint


【解决方案1】:

默认情况下,标签将translatesAutoresizingMaskIntoConstraints 设置为true,因此视图会自动添加约束。当您添加自己的约束时,这些约束与已添加的约束发生冲突。 (您应该会在控制台中看到很多警告。)

如果你想使用自动布局设置l.translatesAutoresizingMaskIntoConstraints = false。您的约束现在应该可以正常工作了。

如果您还想设置标签的宽度和高度,也可以使用约束进行设置(不理会框架)。

【讨论】:

  • 多么棒的答案。
猜你喜欢
  • 2017-07-22
  • 2017-03-24
  • 1970-01-01
  • 2016-02-08
  • 2017-11-13
  • 2015-08-19
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多