JY-CONTENTS

JY

JY-CONTENTS
search

+

MENU

【Swift】コードでレイアウト NSLayoutAnchor

【Swift】コードでレイアウト NSLayoutAnchor

(DATE)

-

2018.09.01

(CATEGORY)

-

NSLayoutAnchorはコードでautoレイアウトを実装するためのクラスです。
iOS9で追加されたクラスで、今まで使用していた NSLayoutConstraint クラスでの記述より直感的で解りやすく記述できるようになっています。

記述の仕方

下記の2つのコードは生成したラベルのtopになる位置(x座標:minX)をviewのtopになる位置から10離れた(下がった)位置にレイアウトしています。

基本的な書き方

let label = UILabel()
let topAnchor = label.topAnchor.constraint(equalTo: view.topAnchor, constant: 10)
topAnchor.isActive = true

isActiveメソッドをtrueにして設定を適用しています。

省略した書き方

上記のコードは下記のように書くこともできます。

let label = UILabel()
label.topAnchor.constraint(equalTo: view.topAnchor, constant: 10).isActive = true

開発での使い方

アプリ開発の時は下記のような感じで記述します。

class ViewController: UIViewController {
    var redView:UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        redView = UIView()
        redView.backgroundColor = UIColor.red
        view.addSubview(redView)
        
        redView.translatesAutoresizingMaskIntoConstraints = false
        redView.topAnchor.constraint(equalTo: view.topAnchor, constant: 10.0).isActive = true
    }
    
    override func viewDidLayoutSubviews() {
        redView.frame.size = CGSize(width: view.frame.width, height: 20)
    }
}

AutoresizingMaskは、ある親 Viewに対して、あるViewのどの部分が固定され、どの部分を変化させるかを制約するものです。
これは、AutoLayoutの制約にも影響を与えます。
なので、コードでAutoLayoutを作成する場合は必ず無効にする必要があります
translatesAutoresizingMaskIntoConstraintsをfalseで無効になります。

※)上記の書き方の場合は動作しますが、以下のようにviewDidLayoutSubviewsメソッド内にframeとAutoLayoutを書くと表示されません。

override func viewDidLayoutSubviews() {
   redView.frame.size = CGSize(width: view.frame.width, height: 20)
   redView.translatesAutoresizingMaskIntoConstraints = false redView.topAnchor.constraint(equalTo: view.topAnchor, constant: 10.0).isActive = true
}

親viewを基準にした大きさの設定

下記はredViewの横幅をviewの横幅の1/2に設定しています。

redView.widthAnchor.constraint(equalTo: self.view.widthAnchor, multiplier: 0.5).isActive = true

設定位置の取得

topAnchor はトップの位置を取得するプロパティですが、その他の位置は下記になります。

プロパティ名位置
leadingAnchor左端
trailingAnchor右端
topAnchor上端
bottomAnchor下端
centerYAnchorオブジェクトのY座標軸の中心
centerXAnchorオブジェクトのX座標軸の中心
widthAnchorオブジェクトの横幅
heightAnchorオブジェクトの縦幅

NEW TOPICS

/ ニュー & アップデート

SEE ALSO

/ 似た記事を見る

JY CONTENTS UNIQUE BLOG

search-menu search-menu