簡體   English   中英

iOS工具欄的高度取決於初始方向

[英]iOS Toolbar Height Depends on Initial Orientation

我在iPhone底部的UIToolbar上遇到了一些麻煩。 當我導航到場景時,條形的高度似乎取決於設備的方向,而當方向改變時,條形的高度不會更新。

  1. 當我以縱向模式導航到場景時,底部欄的高度為44。然后我打開手機(此處為iPhone XR)時,欄的高度保持為44。
  2. 當我在橫向模式下打開場景時,底欄的高度為49,而當我將手機直立時,底欄的高度也保持為49。

可以使用以下簡單的2場景應用輕松復制此代碼: 演示應用

最初,這並不是真正的問題-用戶甚至都不會注意到這個小小的變化。 但是現在我在拆分視圖中使用底部的欄。 最初以縱向打開時,底部工具欄的高度為44。將手機變為橫向時,將打開帶有自己的工具欄(高49)的詳細視圖。 然后,我有兩個高度不同的工具欄彼此相鄰,這非常丑陋: splitview中不同的工具欄高度

所以問題是我如何確保工具欄的高度在方向更改時更新,或者高度始終相同(例如在電子郵件應用程序中)。 我不想硬編碼高度,以免最終會在將來的iOS版本或其他設備上使情況變得更糟。

我正在使用Xcode 10.1,並在具有iOS 12.1.2的iPhone上運行該應用程序。

您是將工具欄手動添加到視圖上,還是使用navigationController管理工具欄? 我假設您這樣做了,因為旋轉時高度沒有變化。

導航控制器在旋轉時管理工具欄的高度。 將以下內容添加到viewDidLoad()方法將顯示navigationController的工具欄。

navigationController?.setToolbarHidden(false, animated: false)

與您的視圖控制器管理工具欄相比,此方法所需的代碼少(少一種方法,少一種出口)。

這是我用來檢查工具欄是否在iPad和iPhone Max型號上正確顯示的默認模板: https : //github.com/joelesli/TBHeight/

iPad Pro 在此處輸入圖片說明

iPhone XS最大 在此處輸入圖片說明

iPad Air 2 在此處輸入圖片說明

iPhone 8 Plus 在此處輸入圖片說明

我最初通過重寫viewWillTransition(...)來重繪工具欄並假定每個方向的默認尺寸來解決它(基於上面的Mocha注釋)。

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    if let bBar = bottomBar { bBar.invalidateIntrinsicContentSize() }
}

這樣一來,它就可以適應將來的UI更改,並且我不冒險在應用程序審批中遇到麻煩(如果修改標准UI元素樣式在這里會成為問題)。

更新:盡管在某些情況下這可能是一個不錯的選擇,但我更喜歡JoelEsli的解決方案,因此為了完整起見,我將其保留在此處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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