我的应用程序的statusbar样式是UIStatusBarStyleLightContent
,它在我的rootViewController中设置为preferredStatusBarStyle
。
现在我遇到了一个问题,当从我的应用程序中打开SFSafariViewController
时,它继承了SFSafariViewController
的白色背景上的状态条样式。
有办法为SFSafariViewController设置statusbar样式吗?
我试图将SFSafariViewController子类化并重写此方法,但这并没有帮助。
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
更新:
[UIApplication sharedApplication setStatusBarStyle:]可以做到这一点,但是在iOS 9中不推荐这种方法。
发布于 2017-01-08 04:17:15
您根本不必对SFSafariViewController
进行子类分类。
modalPresentationCapturesStatusBarAppearance = true
只在您的实例 SFSafariViewController
上设置,它将自己处理其余的.。
这是因为它自己的默认preferredStatusBarStyle
是,您猜到了,.default
。视图层次结构仍然依赖于呈现视图控制器来获取状态栏外观,因此通过将modalPresentationCapturesStatusBarAppearance
设置为true
,它将是接收方请求的状态栏外观。
TL;DR
safariViewController.modalPresentationCapturesStatusBarAppearance = true
(当UIViewControllerBasedStatusBarAppearance
设置为Info.plist中的NO
时,此行为将被重写,不起作用)
发布于 2016-04-28 20:23:21
这不是最好的解决办法,但有效。
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
}
}
根据您的喜好更改.Default和.LightContent。
发布于 2017-05-17 10:58:22
你可以使用扩展。
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
}
}
https://stackoverflow.com/questions/33172960
复制相似问题