2017-04-14 14 views
0

CustomView'sのサイズは300x300としましょう。 iconImageViewにはサイズと割り当てられた制約があります。 UILabelのテキストはどれくらいの長さになるのか分かりませんので、一定のサイズにしたいとは思いませんUILabel。私の目標は、左の制約をiconImageViewの右辺に、右辺をcustomViewに固定することです。自動サイジングUILabel with SnapKit

override func updateConstraints() { 
    super.updateConstraints() 

    iconImageView.snp.updateConstraints { (make) in 
     make.left.equalTo(customView).offset(10) 
     make.centerY.equalTo(customView) 
     make.size.equalTo(CGSize(width: 40.0, height: 40.0)) 
    } 

    nameLabel.snp.updateConstraints { (make) in 
     make.right.equalTo(customView).offset(-10) 
     make.left.equalTo(iconImageView.snp.right).offset(10) 
     make.centerY.equalTo(customView) 
    } 
} 

私はこの方法を試したとき、私はエラーを取得する:Unable to simultaneously satisfy constraints.これを行うための適切な方法は何ですか?

+0

hmmm ...コードを試したところ、うまくいきました。私はこのコードが 'UIView'サブクラスにあると仮定していますか?そして、そのビューには、そのスーパービューに関連した適切な制約がありますか?そして 'customView'には300x300にするための適切な制約があり、そのビューの中に配置されていますか? – DonMag

+0

このコードはUIViewサブクラスにあり、スーパービューに対して適切な制約があります。このビューはUIPageViewControllerの一部であるため、別のViewControllerにスライドするとエラーが発生します。 – Billy

+0

うーん...エラーが発生したときの情報が必要になると思います。最初に、ここで 'updateConstraints()'のオーバーライドに関する議論を読む必要があります(これはあなたが最初に必要とする情報を与えるだけかもしれません):https://developer.apple.com/reference/uikit/uiview/1622512 - 更新条件 – DonMag

答えて

0

あなたのサブビューは上/下の制約について何も知らないと思います。つまり、ビューは自分自身を再レイアウトする方法を知らないということです。この方法を試してください。

override func updateConstraints() { 
    super.updateConstraints() 

    iconImageView.snp.updateConstraints { (make) in 
     make.left.equalTo(customView).offset(10) 
     make.centerY.equalTo(customView) 

     // Also from my point of view this line \/ 
     // is not very readable 
     // make.size.equalTo(CGSize(width: 40.0, height: 40.0)) 
     // Changed to: 
     make.width.height.equalTo(40.0) 
    } 

    nameLabel.snp.updateConstraints { (make) in 
     make.right.equalTo(customView).offset(-10) 
     make.left.equalTo(iconImageView.snp.right).offset(10) 

     // Add: 
     make.top.equalTo(customView.snp.top) 
     make.bottom.equalTo(customView.snp.bottom) 
    } 
} 

あなたは(など、空の文字列の場合)、ラベルの「デフォルト」の高さを維持したい場合は、追加することができます。

make.height.greaterThanOrEqual(40.0) 

も自動レイアウトやフレームがありませんお互いにうまく機能するので、次のような "updateConstraints"メソッドでカスタムビューをレイアウトする必要があります。

customView.snp.updateConstraints { (make) in 
    make.edges.equalTo(self) 
} 
関連する問題