3周遅れでAutoLayoutを取り入れています。よろしくおねがいします。
今回のテーマは
ViewControllerのviewの上に乗せた別のviewでもsafeAreaLayoutGuideは有効な値か?
です。
知らない人には新しい、知ってる人には懐かしい、そんな記事を目指してます。
#結論
有効です。
#コード
class ViewController: UIViewController {
let testView1 = UIView()
let testView2 = UIView()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
view.addSubview(testView1)
testView1.addSubview(testView2)
testView1.backgroundColor = .red
testView2.backgroundColor = .blue
testView1.translatesAutoresizingMaskIntoConstraints = false
testView1.widthAnchor.constraint(equalToConstant: 100.0).isActive = true
testView1.heightAnchor.constraint(equalToConstant: 100.0).isActive = true
testView1.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
testView1.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
testView2.translatesAutoresizingMaskIntoConstraints = false
testView2.widthAnchor.constraint(equalToConstant: 50.0).isActive = true
testView2.heightAnchor.constraint(equalToConstant: 50.0).isActive = true
testView2.centerXAnchor.constraint(equalTo: testView1.centerXAnchor).isActive = true
//↓↓↓これです↓↓↓
testView2.bottomAnchor.constraint(equalTo: testView1.safeAreaLayoutGuide.bottomAnchor).isActive = true
}
}
#結果
シミュレータで実行したiPhone11の画面の下の部分です。
赤は土台のviewの上に乗ってます。
青は赤の上に乗っています。
赤のsafeAreaLayoutGuide.bottomAnchorと青のbottomをイコールにしています。
#さいごに
super-sub関係を飛び越えることをよしとするなら直接viewController直下のviewのsafeAreaLayoutGuideにアクセスするのもよいですね。自分はこの辺のスタンダードがわからなかったので、super-sub関係内で出来るかどうかコードを書いて確かめてしまいました。
#追加
オートレイアウトをやっているときに出てきた疑問だったのでオートレイアウトの話題のつもりで書いてますけど、よく考えたらsafe areaの話題と言ったほうがいいかもしれません.