【问题标题】:Status Bar White Opaque on Launch启动时状态栏白色不透明
【发布时间】:2016-05-11 21:03:48
【问题描述】:

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

我将导航栏隐藏在根视图控制器的viewDidLoad() 中。

    self.navigationController?.navigationBar.hidden = true

应用启动时,状态栏为白色且不透明。一旦我滚动到下一页,它就会变成半透明的,并且页面的背景颜色会透出来。

发布时的外观

滑动到下一页时的外观

有人可以帮我了解这里发生了什么以及如何解决它吗?如果不明显,我希望启动时的第二个行为;状态栏半透明,页面背景透出。

我试过了

  • 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 类似,但没有一个解决方案有效,它已经有一年多了,当我联系发帖者时,他说他认为他在状态栏的下方放置了一个视图。我不确定我是否可以管理视图,使其与页面视图控制器的滚动方面无缝协作。

【问题讨论】:

    标签: ios uinavigationcontroller uipageviewcontroller uistatusbar


    【解决方案1】:

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

    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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      • 1970-01-01
      • 2017-04-14
      相关资源
      最近更新 更多