Interface Builder の自動レイアウト制約に識別子を追加する方法はありますか? 質問する

Interface Builder の自動レイアウト制約に識別子を追加する方法はありますか? 質問する

Interface Builder でビジュアル レイアウトを行った後、実行時にアクセスしたい制約をいくつか作成しました。後で検索できるように、Interface Builder で制約にラベルを付けたり識別したりする方法はありますか?

私がこれをやりたい理由は、視覚的に指定された制約に基づいて計算を実行する必要があるからです。Appleがビジュアルフォーマット言語コントローラーでプログラム的に制約を指定することもできます。IB の設計時のフィードバックを失わないように、このアプローチは使用しません。

編集

参照アウトレットの作成は機能しましたが、疑問は依然として残ります。

ベストアンサー1

アップデート:

バルトロミエ・セマンチクが説明したように彼の答え、現在では識別子フィールドは属性インスペクタNSLayoutConstraintこのフィールドを自分で公開する必要がないようにするためです。ドキュメントの概要ビューまたはストーリーボードビューで識別子を追加し、属性インスペクタ右側に。


以前の回答:

はい、可能です。とNSLayoutConstraint呼ばれるプロパティがあり、identifierインターフェースビルダー割り当てられました。これをデモするために、シングルビューアプリケーション赤いボックスである単一のサブビューがあります。このサブビューには、幅、高さ、コンテナー内で水平方向に中央揃え、コンテナー内で垂直方向に中央揃えの 4 つの制約があります。redBoxWidth次のようにして、幅制約に識別子を付けました。

  1. 幅の制約をクリックしますドキュメントレイアウトビューそして、アイデンティティ検査官ユーザー定義のランタイム属性+下のキーパス。 変化キーパス識別子、 変更タイプ ブールを設定し、価値redBoxWidth

    制約に名前を付ける

  2. 次に、ViewDidLoad名前で制約を見つけて、その値を変更することができます。

    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            for subview in view.subviews as [UIView] {
                for constraint in subview.constraints() as [NSLayoutConstraint] {
                    if constraint.identifier == "redBoxWidth" {
                        constraint.constant = 300
                    }
                }
            }
        }
    }
    

おすすめ記事