Objective c SFSafariViewController状态栏样式
我的应用程序的状态栏样式是Objective c SFSafariViewController状态栏样式,objective-c,iphone,cocoa-touch,ios9,Objective C,Iphone,Cocoa Touch,Ios9,我的应用程序的状态栏样式是UIStatusBarStyleLightContent,它在我的rootViewController中设置为preferredStatusBarStyle 现在我有一个问题,当在我的应用程序中打开SFSafariViewController时,它继承了状态栏样式,在SFSafariViewController的白色背景上是浅色和不可见的 有没有办法为SFSafariViewController设置状态栏样式 另外,我试图将SFSafariViewController子
UIStatusBarStyleLightContent
,它在我的rootViewController中设置为preferredStatusBarStyle
现在我有一个问题,当在我的应用程序中打开SFSafariViewController
时,它继承了状态栏样式,在SFSafariViewController
的白色背景上是浅色和不可见的
有没有办法为SFSafariViewController设置状态栏样式
另外,我试图将SFSafariViewController子类化并重写此方法,但没有任何帮助
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
更新:
[[UIApplication sharedApplication]setStatusBarStyle:]可以做到这一点,但这种方法在iOS 9中已被弃用。如何
class MyCustomSafariViewController: SFSafariViewController {
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
}
或者私有API—如果可以使用的话。这不是最好的解决方案,但它可以工作
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。您根本不必子类化
SFSafariViewController
只需在您的SFSafariViewController
实例上设置modalPresentationCapturesStatusBarAppearance=true
,其余的将由它自己处理。
这是因为它自己的默认值preferredStatusBarStyle
是.default
。视图层次结构仍然依赖于显示视图控制器的状态栏外观,因此通过将modalPresentationCapturesStatusBarAppearance
设置为true
,它将成为要求状态栏外观的接收者
TL;博士
(当您的Info.plist中将
UIViewControllerBasedStatusBarAppearance
设置为NO
时,此行为被覆盖,不起作用)您可以使用扩展
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
}
}
谢谢你的建议,但我想要黑色的状态栏样式。更新了答案,尝试子类化,但不起作用。无法使用私有API返回
。默认值不起作用,实际上从未调用preferredStatusBarStyle
。请不要建议使用私有API。似乎出现了问题,因为我没有在info.plist中将基于uiviewcontroller的状态栏外观键设置为“是”。我重写了状态栏样式代码,使用基于视图控制器的方式,一切正常perfect@ClayEllis对不起,当时没看到。感谢answerNice解决方案,这是一种将应用程序的较低iOS版本保持在8.0的方法,并且仍然(如果在9.0上使用)使用继承自SFSafariViewController
?我已经得到了我的答案@可用(iOS 9.0,*)class MySafariViewContoller:SFSafariViewController
此解决方案在UIModalPresentationStyle
属性设置为fullScreen
时有效,否则使用上面@clay ellis接受的答案。感谢您提供的最优雅的回答solution@Alex有没有澄清为什么没有?我只是为我工作,它应该基于Clay的信息,SafariVC是设置状态栏文本颜色的一个。只是提醒一下,如果您的信息列表中的属性键“UIViewControllerBasedStatusBarAppearance”设置为No,这不起作用。我如何在ObjectiveC中做到这一点?
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
}
}