Ale*_*nko 16 iphone cocoa-touch objective-c ios9
我的应用程序的状态栏样式是,UIStatusBarStyleLightContent并在我的rootViewController中设置为preferredStatusBarStyle.
现在我有一个问题,当SFSafariViewController从我的应用程序内打开时,它继承了状态栏样式,在白色背景上是轻微的,不可见的SFSafariViewController.
有没有办法为SFSafariViewController设置状态栏样式?
PS我尝试子类SFSafariViewController并覆盖此方法,但它没有帮助.
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
Run Code Online (Sandbox Code Playgroud)
更新:
[[UIApplication sharedApplication] setStatusBarStyle:]可以解决问题,但在iOS 9中不推荐使用此方法.
Cla*_*lis 22
您根本不必进行子类化SFSafariViewController.
只需设置modalPresentationCapturesStatusBarAppearance = true您的实例,SFSafariViewController它将自行处理其余部分.
这是有效的,因为它自己的默认值preferredStatusBarStyle是,你猜对了.default.视图层次仍然依赖于呈现视图控制器的状态栏外观,因此通过设置modalPresentationCapturesStatusBarAppearance为true,接收器将询问状态栏的外观.
TL; DR
safariViewController.modalPresentationCapturesStatusBarAppearance = true
Run Code Online (Sandbox Code Playgroud)
(此行为被覆盖,不起作用,何时在Info.plist中UIViewControllerBasedStatusBarAppearance设置NO)
小智 9
它不是最好的解决方案,但它确实有效.
class MySafariViewContoller: SFSafariViewController {
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
UIApplication.sharedApplication().statusBarStyle = .Default
}
override func viewWillDisappear(animated: Bool) {
super.viewWillAppear(false)
UIApplication.sharedApplication().statusBarStyle = .LightContent
}
}
Run Code Online (Sandbox Code Playgroud)
根据需要更改.Default和.LightContent.
小智 7
您可以使用扩展程序.
extension SFSafariViewController {
override open func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
UIApplication.shared.statusBarStyle = .default
}
override open func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(true)
UIApplication.shared.statusBarStyle = .lightContent
}
}
Run Code Online (Sandbox Code Playgroud)