プログラムで迅速に制約を追加する

user2363025

FacebookのSDKログインボタンに制約を追加しようとしています。

スクロールビュー内にボタンがあり、スクロールビュー内にあるラベルに上部の制約を追加しようとしています。実行時エラーなしで高さ制約を正常に追加できますが、実際の制約はボタンに適用されていないようです。

@IBOutlet weak var orLbl: UILabel!
@IBOutlet weak var scrollView: UIScrollView!

override func viewDidLoad() {
    super.viewDidLoad()
    var loginFBButton = FBSDKLoginButton()
    loginFBButton.readPermissions = ["public_profile", "email"]

    let heightConstraint = NSLayoutConstraint(
        item: loginFBButton,
        attribute: NSLayoutAttribute.Height,
        relatedBy: NSLayoutRelation.Equal,
        toItem: nil,
        attribute: NSLayoutAttribute.NotAnAttribute,
        multiplier: 1,
        constant: 41)
    let topConstraint = NSLayoutConstraint(
        item: loginFBButton,
        attribute: NSLayoutAttribute.TopMargin,
        relatedBy: NSLayoutRelation.Equal,
        toItem: self.orLbl,
        attribute: NSLayoutAttribute.BottomMargin,
        multiplier: 1,
        constant: 31)
    let leadingConstraint = NSLayoutConstraint(
        item: loginFBButton,
        attribute: NSLayoutAttribute.Leading,
        relatedBy: NSLayoutRelation.Equal,
        toItem: self.registerButton,
        attribute: NSLayoutAttribute.Left,
        multiplier: 1,
        constant: 0)
    let trailingConstraint = NSLayoutConstraint(
        item: loginFBButton,
        attribute: NSLayoutAttribute.Leading,
        relatedBy: NSLayoutRelation.Equal,
        toItem: self.registerButton,
        attribute: NSLayoutAttribute.Right,
        multiplier: 1,
        constant: 0)

    self.scrollView.addSubview(loginFBButton)
    //loginFBButton.center = self.scrollView.center

    loginFBButton.addConstraints([heightConstraint, topConstraint])

}

次に、最上位の制約の追加を含めると、ランタイムエラーが発生します。

ビューに追加する場合、制約のアイテムはそのビュー(またはビュー自体)の子孫である必要があります。ビュー階層をアセンブルする前に制約を解決する必要がある場合、これはクラッシュします。

キャッチされない例外 'NSGenericException'が原因でアプリを終了しています。理由: 'ビューに制約をインストールできません。制約はビューのサブツリーの外側から何かを参照していますか?それは違法です。

ラベルとFacebookボタンの両方がスクロールビューにありますか?orLbl.superviewとloginFBButton.superviewも印刷しましたが、両方のオプションのuiscrollviewを取得しています

バカワマ

新しい(iOS8、OS 10.10)、制約をアクティブ化する簡単な方法があります。これは、制約を追加するビューを特定する必要がありません。制約は、それらが属するビューをすでに認識しているため、最初にビューがsubViewとして追加されていることを確認してから、classメソッドactivateConstraints呼び出してNSLayoutConstraintそれらをアクティブにします。

 NSLayoutConstraint.activateConstraints([heightConstraint, topConstraint])

プログラムでUI要素を作成するときは、フレームを制約にしないようにiOSに指示する必要があります。これを行うには、doを作成loginFBButtonした直後に

Swift 1.2の場合:

loginFBButton.setTranslatesAutoresizingMaskIntoConstraints(false)

Swift 2.0および3.0の場合:

loginFBButton.translatesAutoresizingMaskIntoConstraints = false

最後に、より多くの制約が必要になります。幅の制約を設定しloginFBButton、ボタンを水平に配置するための制約を追加することをお勧めします

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

プログラムでUIImageに制約を追加する際の問題| 迅速

分類Dev

比例制約をプログラムで迅速に変更する5

分類Dev

プログラムでUIViewに制約を追加する

分類Dev

プログラムでUITextFieldに制約を追加する

分類Dev

プログラムでビューに制約を追加する

分類Dev

プログラムでcollectionViewCellに制約を追加しますか?

分類Dev

UITextViewを使用してUIViewにプログラムで制約を追加する

分類Dev

プログラムで負の制約を追加する

分類Dev

プログラムでConstraintLayoutにビューと制約を追加する方法?

分類Dev

UIButtonにプログラムで追加された制約を変更する方法

分類Dev

NSClickGestureRecognizerをNSButtonにプログラムで迅速に追加する

分類Dev

プログラムによる迅速な位置と制約

分類Dev

プログラムでSwiftをnavigationBarに制約を追加

分類Dev

ConstraintLayoutでのプログラムによる制約の削除/追加

分類Dev

ConstraintLayoutでのプログラムによる制約の削除/追加

分類Dev

Objective-Cでプログラムによる制約の追加

分類Dev

Swiftのビューにプログラムで制約を追加するとエラーが発生する

分類Dev

プログラムで制約のあるビューにカスタムボタンを追加する

分類Dev

iOSがSwiftでプログラムにより制約を追加

分類Dev

テーブル セルにプログラムで追加されたラベルにプログラムで制約を追加する

分類Dev

プログラムでビデオに制約を追加することはできません

分類Dev

プログラムでUIConstraintsを追加するときに、末尾の制約が適用されない

分類Dev

プログラムによる制約を使用するときにCAGradientLayerをUIViewに追加する方法

分類Dev

ConstraintLayout:プログラムで制約を変更する

分類Dev

プログラムで高さ制約を更新する

分類Dev

プログラムで制約を変更するSwift

分類Dev

プログラムでuibuttonの制約を取得する

分類Dev

プログラムでUITableViewCell制約を作成する

分類Dev

プログラムで制約のIDを取得する

Related 関連記事

  1. 1

    プログラムでUIImageに制約を追加する際の問題| 迅速

  2. 2

    比例制約をプログラムで迅速に変更する5

  3. 3

    プログラムでUIViewに制約を追加する

  4. 4

    プログラムでUITextFieldに制約を追加する

  5. 5

    プログラムでビューに制約を追加する

  6. 6

    プログラムでcollectionViewCellに制約を追加しますか?

  7. 7

    UITextViewを使用してUIViewにプログラムで制約を追加する

  8. 8

    プログラムで負の制約を追加する

  9. 9

    プログラムでConstraintLayoutにビューと制約を追加する方法?

  10. 10

    UIButtonにプログラムで追加された制約を変更する方法

  11. 11

    NSClickGestureRecognizerをNSButtonにプログラムで迅速に追加する

  12. 12

    プログラムによる迅速な位置と制約

  13. 13

    プログラムでSwiftをnavigationBarに制約を追加

  14. 14

    ConstraintLayoutでのプログラムによる制約の削除/追加

  15. 15

    ConstraintLayoutでのプログラムによる制約の削除/追加

  16. 16

    Objective-Cでプログラムによる制約の追加

  17. 17

    Swiftのビューにプログラムで制約を追加するとエラーが発生する

  18. 18

    プログラムで制約のあるビューにカスタムボタンを追加する

  19. 19

    iOSがSwiftでプログラムにより制約を追加

  20. 20

    テーブル セルにプログラムで追加されたラベルにプログラムで制約を追加する

  21. 21

    プログラムでビデオに制約を追加することはできません

  22. 22

    プログラムでUIConstraintsを追加するときに、末尾の制約が適用されない

  23. 23

    プログラムによる制約を使用するときにCAGradientLayerをUIViewに追加する方法

  24. 24

    ConstraintLayout:プログラムで制約を変更する

  25. 25

    プログラムで高さ制約を更新する

  26. 26

    プログラムで制約を変更するSwift

  27. 27

    プログラムでuibuttonの制約を取得する

  28. 28

    プログラムでUITableViewCell制約を作成する

  29. 29

    プログラムで制約のIDを取得する

ホットタグ

アーカイブ