[英]iOS Autolayout - Position view correctly below translucent navigation bar
在我的故事板中,我有一個UIImageView
,我想將它放置在半透明導航欄下方的固定距離處。 我將視圖控制器的模擬頂部欄設置為半透明欄,我現在的約束是“超級視圖的頂部空間等於 52”,在欄下方 8 個點。
但是,當視圖旋轉到橫向時,導航欄縮小到 34 點,而圖像視圖仍然像縱向一樣處於 52 點。
無論欄有多高,我可以在 IB 中使用什么約束將圖像視圖放置在導航欄下方 8 點處?
謝謝!
選擇您的UIImageView
並控制拖動到頂部布局指南以創建約束。 如果您不熟悉 Top Layout Guide,您可以在左側的結構視圖中選擇它。
正如內斯特指出的那樣,您正在設置視圖頂部邊緣的頂部間距,而不是最近的鄰居,即導航欄。 您應該使用頂部布局指南設置頂部間距約束,以便無論大小類別和方向如何都將其固定。
為此,在文檔大綱視圖中,按住 ctrl 單擊並將一條線從UIImageView
拖到Top Layout Guide
然后從列表中選擇Vertical Spacing
。
選擇 storyBoard 中的 imageView 和 topBar。 在屏幕的右下角,您會看到一個看起來像 H 的按鈕:
選擇它並選擇“垂直間距”。 將約束設置為 8 個像素,它應該可以工作。
快速 4、iOS11+、SnapKit
imageView.snp.makeConstraints { (maker) in
maker.top.equalTo(view.safeAreaLayoutGuide.snp.top).offset(8)
}
如果您使用舊的 Xcode,您可以連接ViewController 的topLayoutGuide
或bottomLayoutGuide
。
但現在它的方式已被棄用。 對於新操作系統的應用, 你應該使用一個視圖的safeAreaLayoutGuide
。
IB 不支持區分操作系統,但您可以在 IB 中創建臨時約束並從代碼中添加真正的約束:
之后在viewDidLoad
某個地方添加代碼:
if #available(iOS 11.0, *) {
label.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor).isActive = true
} else {
label.topAnchor.constraint(equalTo: self.topLayoutGuide.bottomAnchor).isActive = true
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.