Xcode 9.0中iOS应用Presented视图控制器状态栏变黑原因咨询
为什么Present视图控制器时状态栏变成黑色?
这个问题我之前也碰到过,其实核心原因在于iOS对不同方式添加的视图控制器,状态栏的管理逻辑是不一样的:
子视图控制器的状态栏继承规则
当你把TutorialScreenVC作为子控制器添加到现有导航栈的VC中时,它的状态栏样式会自动继承父容器(也就是导航控制器栈顶的视图控制器)的配置。如果你的导航栈里的VC已经设置了白色状态栏(比如通过preferredStatusBarStyle返回.lightContent),子VC自然会沿用这个样式,所以状态栏显示正常。模态Present的状态栏独立管理
当你用presentViewController:方法弹出TutorialScreenVC时,这个VC是作为独立的模态窗口存在的,它的状态栏控制权默认归自己所有。如果TutorialScreenVC没有明确重写preferredStatusBarStyle方法返回白色样式,iOS就会使用默认的UIStatusBarStyleDefault(也就是黑色文字的状态栏),这就是你看到黑色状态栏的原因。
另外补充个细节:如果你在Info.plist里设置了UIViewControllerBasedStatusBarAppearance为NO,全局的状态栏样式由UIApplication的设置控制,但这种情况现在已经不推荐了;而从你的描述来看,导航栈VC能正常显示白色状态栏,说明你用的是基于VC的状态栏管理,所以模态VC没设置的话就会触发默认样式。
内容的提问来源于stack exchange,提问作者Nisar Ahmad
相关产品推荐
相关产品推荐

