Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 启动时状态栏白色不透明_Ios_Uinavigationcontroller_Uipageviewcontroller_Uistatusbar - Fatal编程技术网

Ios 启动时状态栏白色不透明

Ios 启动时状态栏白色不透明,ios,uinavigationcontroller,uipageviewcontroller,uistatusbar,Ios,Uinavigationcontroller,Uipageviewcontroller,Uistatusbar,我的初始视图控制器是导航控制器,其根视图控制器是符合UIPageViewControllerDataSource协议的UIViewController。“我的页面”的内容是三个独特的视图控制器,它们在故事板中有一个场景和一个swift文件 我将导航栏隐藏在根视图控制器的viewDidLoad()中 当应用程序启动时,状态栏是白色且不透明的。只要我滚动到下一页,它就会变成半透明的,页面的背景色就会显示出来 发布时出现 滑动到下一页时的外观 有人能帮我理解这里发生了什么,以及如何解决它吗?如果不

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

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

当应用程序启动时,状态栏是白色且不透明的。只要我滚动到下一页,它就会变成半透明的,页面的背景色就会显示出来

发布时出现

滑动到下一页时的外观

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

我试过了

  • viewDidLoad()
    UIApplication.sharedApplication().statusBarStyle=.LightContent
  • 在根视图控制器中:

    override func preferredStatusBarStyle() -> UIStatusBarStyle {
        return .Default
    }
    
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(true)
        self.navigationController?.navigationBar.barStyle = .Default
        self.navigationController?.navigationBar.barTintColor = UIColor.clearColor()
    }
    
    然后是
    viewDidLoad()中的
    self.setNeedsStatusBarAppearanceUpdate()

  • 在根视图控制器中:

    override func preferredStatusBarStyle() -> UIStatusBarStyle {
        return .Default
    }
    
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(true)
        self.navigationController?.navigationBar.barStyle = .Default
        self.navigationController?.navigationBar.barTintColor = UIColor.clearColor()
    }
    
  • viewDidLoad()
    (位于
    navigationBar.hidden
    上方)中:

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


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

我找到了一个解决方案。我的一个朋友提出了一个建议,这让我开始思考
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

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

对我来说,主视图的子视图对顶部/底部布局指南有边缘约束,这将子视图向下推到状态栏的大小。将子视图边约束设置为主视图边可以修复此问题