2017-01-25 71 views
3

期望......斯威夫特,約束的UILabel,錨右

enter image description here

出於某種原因,下面不工作:

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 =自我。它神祕地錨定在左邊,而不是右邊。

+1

你沒有得到與該代碼自動佈局警告?框架和約束衝突。通過添加'l.translatesAutoresizingMaskIntoConstraints = false'(不設置框架)我得到您想要的佈局。 –

+1

facepalm!啊,你太棒了@JamesP。爲什麼不把它作爲答案,它會幫助別人,你應該得到榮譽/積分! :) – Fattie

+1

哈哈,我不確定它會那麼簡單。 –

回答

2

默認情況下,標籤的translatesAutoresizingMaskIntoConstraints設置爲true,因此視圖會自動添加約束。當你添加自己的限制時,這些限制與已經添加的限制相沖突(您應該會在控制檯中看到很多警告。)

如果要使用自動佈局設置l.translatesAutoresizingMaskIntoConstraints = false。你的約束現在應該可以正常工作

如果您還想設置標籤的寬度和高度,請設置使用約束條件(僅保留框架)。

+0

真是個好的答案。 – Fattie