首页 文章

启动时状态栏白色不透明

提问于
浏览
0

我的初始视图控制器是导航控制器,其根视图控制器是 UIViewController ,符合 UIPageViewControllerDataSource 协议 . 我的页面内容是三个独特的视图控制器,它们在故事板中都有一个场景和一个swift文件 .

我隐藏了根视图控制器的 viewDidLoad() 中的导航栏 .

self.navigationController?.navigationBar.hidden = true

应用程序启动时,状态栏为白色且不透明 . 当我滚动到下一页时,它变得半透明,页面的背景颜色显示出来 .

Appearance on Launch

enter image description here

Appearance While Swiping to Next Page

enter image description here

有人可以帮助我了解这里发生了什么以及如何解决它?如果不是很明显,我想要发布的第二个行为;状态栏是半透明的,页面背景显示 .

我试过了

  • viewDidLoad()UIApplication.sharedApplication().statusBarStyle = .LightContent

  • 在根视图控制器中:

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .Default
}

viewDidLoad() 之后是 self.setNeedsStatusBarAppearanceUpdate()

  • 在根视图控制器中:
override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(true)
    self.navigationController?.navigationBar.barStyle = .Default
    self.navigationController?.navigationBar.barTintColor = UIColor.clearColor()
}
  • viewDidLoad() (以上 navigationBar.hidden ):
self.navigationController?.navigationBar.barStyle = .Default
self.navigationController?.navigationBar.barTintColor = UIColor.clearColor()

请注意,当我删除导航控制器并将根视图控制器设置为初始视图控制器时,状态栏将显示为预期 - 半透明 .

这个question是相似的,但没有一个解决方案有效,它已经超过一年了,当我联系海报时,他说他认为他在状态栏的下方放置了一个视图 . 我不确定我是否能够以与页面视图控制器的滚动方面无缝协作的方式管理视图 .

2 回答

  • 1

    我找到了解决方案 . 我的一个朋友提出了一个建议,这让我开始考虑 UIPageViewController 的框架 . 这导致我 grab 状态栏的高度,然后将框架向下调整那么多 .

    viewDidLoad

    let pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! UIPageViewController
    
    // More pageViewController setup
    
    let statusBarHeight: CGFloat = UIApplication.sharedApplication().statusBarFrame.height
    
    let x = pageViewController.view.bounds.origin.x
    let y = pageViewController.view.bounds.origin.y - statusBarHeight
    let width = pageViewController.view.bounds.width
    let height = pageViewController.view.bounds.height + statusBarHeight
        let frame = CGRect(x: x, y: y, width: width, height: height)
    
    pageViewController.view.frame = frame
    

    我仍然不明白为什么需要手动调整 . (希望其他人会提出解决方案/解释 . )但我希望这段代码可以帮助某人 .

  • 0

    对我来说发生的事情是主视图的子视图对顶部/底部布局指南有边缘限制,这会将子视图推到状态栏的大小 . 将子视图边缘约束设置为主视图边缘可以修复它 .

相关问题