今回もAutoLayoutです。
A,B,C,D,Eの5つの荷物が入ったかばんを金属探知機にかけたら警報が鳴った。
Aを取り出してから再度かばんを検査するとまた警報が鳴った。
次にBを取り出して検査するとまた警報が鳴った。
さらにCを取り出して検査すると今度は警報が鳴らなかった。
あなたが次にするべきことは次のうちどちらか。
- かばんの中身はDとEで決定する
- AとBを順番にかばんに入れて検査し、警報が鳴らないならかばんに入れておくことを決定する(要するにAとBについて調べる)
これは私がAutoLayoutで感じた疑問である。
#AutoLayoutこの先生きのこる問題
AutoLayoutの3つの制約A,B,Cがある。
プライオリティはA>B>C。
ある状況でAとBはバッティングしてAとCはバッティングしなかった。
Bを排除することは決定だが、AとバッティングしないCはどうなるのか。
#結論
Cは排除される。
#検証コード
import UIKit
class ViewController: UIViewController {
let viewA = UIView()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
viewA.backgroundColor = UIColor.red
view.addSubview(viewA)
viewA.translatesAutoresizingMaskIntoConstraints = false
viewA.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 50.0).isActive = true
viewA.heightAnchor.constraint(equalToConstant: 100.0).isActive = true
viewA.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
viewA.widthAnchor.constraint(greaterThanOrEqualToConstant: 50.0).isActive = true
let w2 = viewA.widthAnchor.constraint(equalToConstant: 30.0)
w2.priority = UILayoutPriority(rawValue: 999.0)
w2.isActive = true
let w3 = viewA.widthAnchor.constraint(equalToConstant: 200.0)
w3.priority = UILayoutPriority(rawValue: 998.0)
w3.isActive = true
}
}
#ちなみに
AとCだけにするとちゃんとCが生きてます。
縦100に対して横200。
#お願い
公式の情報を見つけてないので知っている人いたら教えて下さい。