[ iOS / Swift ] 解決 Navigation Bar 設為不半透明, push 後再返回會出現 UICollectionView、UITableView 被 Navigation Bar 遮住的問題

遇到的問題:

在上次解決 Navigation Bar 設為不半透明,添加 UISearchBar  後 push 會出現間距。 [前往文章
又出現新的問題,(圖ㄧ) 畫面 push 到 (圖二) 畫面後再返回 (圖ㄧ) 畫面後,會出現 UICollectionView、UITableView 會被 Navigation Bar 遮住。


解決的方法:

在 (圖一) 畫面將要顯示時加入對 navigationController view 重新佈局的方法。


override func viewWillAppear(_ animated: Bool) {

    super.viewWillAppear(animated)

        

    navigationController?.view.setNeedsLayout()

    navigationController?.view.layoutIfNeeded()

}



解決後成果:

Navigation Bar 在設為不半透明時,(圖ㄧ) 畫面 push 到 (圖二) 畫面後再返回 (圖ㄧ) 畫面後,不會再出現 UICollectionView、UITableView 會被 Navigation Bar 遮住的情況發生。


修正 Bug:

後來發現在 (圖ㄧ) 畫面 push 到 (圖二) 畫面時,會出現間距。這是 Navigation Bar 設為不半透明才會出現的問題。
後來經過查詢後發現只要在 viewDidLoad 加入 extendedLayoutIncludesOpaqueBars 設為 true ,讓 View 可以在 Navigation Bar 設為不半透明時,可以擴展佈局到 Navigation Bar 底部,就可以解決這個佈局的 Bug。


override func viewDidLoad() {

    super.viewDidLoad()


    extendedLayoutIncludesOpaqueBars = true

}


//    override func viewWillAppear(_ animated: Bool) {

//        super.viewWillAppear(animated)

//        

//        navigationController?.view.setNeedsLayout()

//        navigationController?.view.layoutIfNeeded()

//    }




留言