在状态栏下设置CollectionView框架时,Swift iOS -NavigationBar hidesBarsOnSwipe永远不会重新出现

时间:2018-03-03 21:37:27

标签: ios swift uicollectionview uinavigationbar statusbar

我在NavigationController中有一个带有编程CollectionView的tabBar。我注意到,当向上滑动时,会在状态栏下显示CollectionView单元格。为了配置CollectionView的框架时,为了解决这个问题,我使用了view.frame.origin.y + 20,其中20是状态栏的高度。我这样做的原因是因为我使用view.frame.size.height - tabBarController?.tabBar.frame.size.height来阻止单元格显示在tabBar下面并且它起作用。

我还想在滑动时隐藏导航条,所以在ViewDidLoad中我设置了navigationController?.hidesBarsOnSwipe = true

问题当向上滑动导航栏隐藏在滑动上并且细胞不再显示在statusBar 下方,但在向下滑动时,导航栏永远不会返回。为什么会这样?

代码:

override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = UIColor.white
        navigationItem.title = "Home"

        navigationController?.hidesBarsOnSwipe = true

        configureCollectionView()
}

func configureCollectionView(){

        let frame = CGRect(x: view.frame.origin.x,
                       y: view.frame.origin.y + 20, // here is where I add + 20 for the statusBar's height
                       width: view.frame.size.width,
                       height: view.frame.size.height - tabBarController!.tabBar.frame.size.height) // here is where I subtracted the tabBar's height (- 49)

        let layout = UICollectionViewFlowLayout()
        layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0)

        collectionView = UICollectionView(frame: frame, collectionViewLayout: layout)
        collectionView.dataSource = self
        collectionView.delegate = self
        collectionView.backgroundColor = UIColor.white
        collectionView.alwaysBounceVertical = true
        collectionView.showsVerticalScrollIndicator = false
        collectionView.register(HomeCell.self, forCellWithReuseIdentifier: homeCell)
        view.addSubview(collectionView)

}

1 个答案:

答案 0 :(得分:1)

这是一个简单的修复。我跟着this answer

override var prefersStatusBarHidden: Bool {
    return navigationController?.isNavigationBarHidden ?? false
}

并确保您拥有"查看基于控制器的状态栏外观" ="是"在您的应用程序.plist文件中。