こちらの手元でも試してみましたが、Interface Builderでドンピシャで指定できる方法は見つかりませんでした。が、代替手段として下記の手順で実現できました。
制約の値を次のようにする
Item | Value |
---|
First Item | View.Center Y |
Relation | Equal |
Second Item | Safe Area.Top |
Constant | 0 |
Multiplier | 1 |
制約をコードに関連付ける
当方の手元では仮に、 purpleViewCenterYConstraint という名前で参照するようにしました
swift
1class ViewController: UIViewController {
2 @IBOutlet weak var purpleViewCenterYConstraint: NSLayoutConstraint!
3
4}
制約の値を、SafeAreaの高さの1/4に指定する
swift
1class ViewController: UIViewController {
2
3 @IBOutlet weak var purpleViewCenterYConstraint: NSLayoutConstraint!
4
5 var safeAreaHeight: CGFloat {
6 return self.view.bounds.size.height - (self.view.safeAreaInsets.top + self.view.safeAreaInsets.bottom)
7 }
8
9 override func viewWillLayoutSubviews() {
10 super.viewWillLayoutSubviews()
11 self.purpleViewCenterYConstraint.constant = self.safeAreaHeight / 4
12 }
13
14 override func viewSafeAreaInsetsDidChange() {
15 super.viewSafeAreaInsetsDidChange()
16 self.purpleViewCenterYConstraint?.constant = self.safeAreaHeight / 4
17 }
18}
画像では青と水色がSafeArea、赤とオレンジがViewController直下のViewの高さの1/4を示しています
縦画面のとき:
横画面のとき:
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/23 15:21
退会済みユーザー
2020/05/23 15:34 編集