簡體   English   中英

iOS Autolayout - 在半透明導航欄下方正確定位視圖

[英]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 的topLayoutGuidebottomLayoutGuide
但現在它的方式已被棄用。 對於新操作系統的應用, 你應該使用一個視圖的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM