我的初始视图控制器是导航控制器,其根视图控制器是UIViewController
,符合UIPageViewControllerDataSource
协议。我的页面内容是三个独特的视图控制器,它们在故事板中都有一个场景和一个快速文件。
我隐藏了根视图控制器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是相似的,但没有一个解决方案有效,它已经超过一年了,当我联系海报时,他说他认为他在状态栏的下方放置了一个视图。我不确定我是否能够以与页面视图控制器的滚动方面无缝协作的方式管理视图。
答案 0 :(得分: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
我仍然不明白为什么需要手动调整。 (希望其他人会提出解决方案/解释。)但我希望这段代码可以帮助某人。
答案 1 :(得分:0)
我发生的事情是主视图的子视图对顶部/底部布局指南有边缘限制,这会将子视图推向状态栏的大小。将子视图边缘约束设置为主视图边缘可以修复它。