2017-09-14 93 views
7

默認情況下在iPhone X狀態欄看起來是這樣的:如何獲得一個黑色的狀態欄上的iPhone X iOS上的11

enter image description here

但我想實現這一點:

enter image description here

我嘗試將preferredStatusBarStyle設置爲lightContent,但它只在將狀態欄後面的背景設置爲黑色後才起作用。

要修復圓角我最終添加了圓角的另一個子視圖。

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     view.backgroundColor = .black 

     let roundedView = UIView(
      frame: CGRect(
       x: 0, 
       y: UIApplication.shared.statusBarFrame.height, 
       width: view.frame.width, 
       height: view.frame.height 
      ) 
     ) 
     roundedView.layer.cornerRadius = 10 
     roundedView.layer.masksToBounds = true 
     roundedView.backgroundColor = .white 
     view.addSubview(roundedView) 

     let label = UILabel(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 60)) 
     label.text = "Black statusbar!" 
     label.textAlignment = .center 
     roundedView.addSubview(label) 
    } 

    override var preferredStatusBarStyle: UIStatusBarStyle { 
     return .lightContent 
    } 
} 

我想知道這是否是最好的方法..必須有更好的方法來實現這一點。


UPDATE

這是一個可怕的想法,因爲:

不要嘛sk或特別注意關鍵顯示功能。不要試圖隱藏設備的圓角,傳感器外殼或 指示燈,通過在屏幕頂部和底部放置黑條來訪問主屏幕。不要使用類似於 括號,邊框,形狀或教學文字的視覺裝飾品來呼籲特殊的 注意這些區域。

  • 圓角在視圖的頂部看起來不錯,但你必須在代碼中添加例外,以確保圓角不會對其他的iPhone中。你需要把它放在你的所有ViewController/Storyboard中。這並不是很好。

  • 視圖底部的圓角將在屏幕截圖中直線顯示,但頂部的角落(手動設置)不會。當用戶分享你的應用程序時,這會很難看。

+1

安全區域已經引起一大堆的麻煩向後兼容,這只是將是燃料在火。 – Annjawn

回答

10

安全區域佈局是解決您的問題的方法。

我試着在我現有的項目中解決方案,它工作正常。

  • 將黑色背景顏色(或任何你想要的)設置爲視圖控制器的主視圖。
  • 現在添加子視圖(帶有白色背景)並設置其相對於安全區域佈局的約束(或者如果Xcode版本低於9,則遵循頂部和底部佈局指南)。
  • 將此子視圖(以白色背景)作爲主視圖,並使用它處理進一步的設計。

下面是結果示例快照,通過啓用或禁用安全區域佈局,我測試和實施。

僅供參考:在這些快照中,主視圖具有紅色背景,子視圖具有藍色背景色。

安全區域佈局: enter image description here

自動版式

enter image description here

+0

謝謝!我更新了我的問題,也許這畢竟不是一個好主意。但是要繼續練習:這比使用代碼稍微好一些,但是您仍然必須對每個視圖控制器重複此操作..不是理想的權利嗎? – Tieme

+0

我創建了一個IBDesignable自定義視圖接口類,並使用相同的..你和你的方法是絕對正確的,這可能需要每個視圖控制器的手動練習。但這不會很難手動完成。此外,這個想法可以控制您的接口區域,超出了其指南中的蘋果限制。在這個階段,直到我們找到永久的解決方案,這可能是好的。祝你今天愉快 :) – Krunal