2017-01-25 3 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

デフォルトでは、ラベルにはtranslatesAutoresizingMaskIntoConstraintstrueに設定されているため、ビューに自動的に制約が追加されます。独自の制約を追加すると、すでに追加されている制約と競合します。 (あなたのコンソールには多くの警告が表示されるはずです)

自動レイアウト設定を使用する場合は、l.translatesAutoresizingMaskIntoConstraints = falseを使用します。制約が正しく機能するはずです。

ラベルの幅と高さを設定する場合は、制約を使用してもラベルを設定します(フレームのみのままにします)。

+0

素晴らしい答えです。 – Fattie