iPhoneアプリ開発

【Swift】SwiftからNSLayoutConstraintをaddConstraintsすると、exc_bad_instructionが発生して落ちる

AutoLayoutを考慮した画面表示を行いたい場合、必ず必要になってくるのがNSLayoutConstraintである。

本来はStoryboardから設定するが、動的にレイアウトを設定したい場合はSwiftからコーディングでNSLayoutConstraintを扱う必要がある。

 

だが、タイトルにある通り addConstraints の処理後にexc_bad_instruction というエラーが発生して落ちる。

コードは以下。

        self.view.addConstraints([
                
                // self.veiwの上から0pxの位置に配置
                NSLayoutConstraint(
                    item: scrView,
                    attribute: NSLayoutAttribute.Top,
                    relatedBy: NSLayoutRelation.Equal,
                    toItem: self.view,
                    attribute: NSLayoutAttribute.Top,
                    multiplier: 1.0,
                    constant: 0
                ),
                
                // self.viewの横幅いっぱいにする
                NSLayoutConstraint(
                    item: scrView,
                    attribute: NSLayoutAttribute.Width,
                    relatedBy: NSLayoutRelation.Equal,
                    toItem: self.view,
                    attribute: NSLayoutAttribute.Width,
                    multiplier: 1.0,
                    constant: 0
                ),
                
                // self.viewのレイアウトに関わらず高さは64px
                NSLayoutConstraint(
                    item: scrView,
                    attribute: NSLayoutAttribute.Height,
                    relatedBy: NSLayoutRelation.Equal,
                    toItem: nil,
                    attribute: NSLayoutAttribute.Height,
                    multiplier: 1.0,
                    constant: 64
                )]
        )

 

 

調べたみた結果、原因わからずで少し置いておく。

とりあえずNSLayoutConstraintを使わない方向でいく。