启动时状态栏为白色不透明
Status Bar White Opaque on Launch
我的初始视图控制器是一个导航控制器,它的根视图控制器是一个符合UIPageViewControllerDataSource
协议的UIViewController
。我页面的内容是三个独特的视图控制器,它们在故事板中都有一个场景和一个 swift 文件。
我将导航栏隐藏在根视图控制器的 viewDidLoad()
中。
self.navigationController?.navigationBar.hidden = true
应用程序启动时,状态栏为白色且不透明。一旦我滚动到下一页,它就会变成半透明,并且页面的背景颜色会显示出来。
发布时的外观
滑动到下一页时的外观
有人可以帮我了解这里发生了什么以及如何解决它吗?如果不是很明显,我想要启动后的第二个行为;状态栏半透明,页面背景透。
我试过了
- 在
viewDidLoad()
中:UIApplication.sharedApplication().statusBarStyle = .LightContent
在根视图控制器中:
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .Default
}
接着 self.setNeedsStatusBarAppearanceUpdate()
在 viewDidLoad()
在根视图控制器中:
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 是相似的,但是 none 的解决方案有效,它已经有一年多了,当我联系发帖者时,他说他认为他认为他在下面放了一个视图状态栏将是。我不确定我能否以与页面视图控制器的滚动方面无缝协作的方式管理视图。
我找到了解决办法。我的一个朋友提出的建议让我开始思考 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
我还是不明白为什么要手动调整这个。 (希望其他人能提供一个 solution/explanation。)但我希望这段代码对某人有所帮助。
我的初始视图控制器是一个导航控制器,它的根视图控制器是一个符合UIPageViewControllerDataSource
协议的UIViewController
。我页面的内容是三个独特的视图控制器,它们在故事板中都有一个场景和一个 swift 文件。
我将导航栏隐藏在根视图控制器的 viewDidLoad()
中。
self.navigationController?.navigationBar.hidden = true
应用程序启动时,状态栏为白色且不透明。一旦我滚动到下一页,它就会变成半透明,并且页面的背景颜色会显示出来。
发布时的外观
滑动到下一页时的外观
有人可以帮我了解这里发生了什么以及如何解决它吗?如果不是很明显,我想要启动后的第二个行为;状态栏半透明,页面背景透。
我试过了
- 在
viewDidLoad()
中:UIApplication.sharedApplication().statusBarStyle = .LightContent
在根视图控制器中:
override func preferredStatusBarStyle() -> UIStatusBarStyle { return .Default }
接着
self.setNeedsStatusBarAppearanceUpdate()
在viewDidLoad()
在根视图控制器中:
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 是相似的,但是 none 的解决方案有效,它已经有一年多了,当我联系发帖者时,他说他认为他认为他在下面放了一个视图状态栏将是。我不确定我能否以与页面视图控制器的滚动方面无缝协作的方式管理视图。
我找到了解决办法。我的一个朋友提出的建议让我开始思考 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
我还是不明白为什么要手动调整这个。 (希望其他人能提供一个 solution/explanation。)但我希望这段代码对某人有所帮助。