我的应用使用深色导航栏颜色。因此,我将状态栏颜色设置为白色(因此它具有很好的对比度)。
我是通过将 barStyle 设置为黑色(使状态栏变为白色)并将 barTint 设置为深红色来实现的。效果很好。
我像这样提出SafariViewController
:
func openWebsite(urlString: String) {
if let url = NSURL(string: urlString) {
let svc = SFSafariViewController(URL: url)
svc.delegate = self
self.presentViewController(svc, animated: true, completion: nil)
}
}
然而,呈现的SafariViewController
的状态栏仍为白色。这是一个问题,因为SVC
导航栏具有默认的白色透明iOS默认样式。所以状态栏基本上是不可见的。
我该如何解决?
答案 0 :(得分:2)
您可以通过使用子类UINavigationController包装SFSafariViewController来实现此目的。
<强> BlackStatusBarNavigationController.h 强>
@interface BlackStatusBarNavigationController : UINavigationController
@end
<强> BlackStatusBarNavigationController.h 强>
@interface BlackStatusBarNavigationController ()
@end
@implementation BlackStatusBarNavigationController
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
@end
像这样使用:
UINavigationController *navigationController = [[BlackStatusBarNavigationController alloc] initWithRootViewController:viewController];
navigationController.navigationBarHidden = YES;
[self presentViewController:navigationController animated:YES completion:nil];
答案 1 :(得分:0)
有两种方法可以覆盖viewControllers中的preferredStatusBarStyle并返回你想要的那个
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .Default
}
或者您可以使用
手动设置它[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
如何通过sharedApplicaion进行设置,您需要将其添加到plist中 &#34;查看基于控制器的状态栏外观&#34;没有
答案 2 :(得分:0)
如果你想为 iOS 13+ 设置状态栏的背景颜色,你可以尝试像这样设置它。
import UIKit
import SafariServices
class CustomSFSafariViewController: SFSafariViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
if #available(iOS 13.0, *) {
UIApplication.shared.statusBarView?.backgroundColor = .purple
}
setNeedsStatusBarAppearanceUpdate()
}
}
extension UIApplication {
@available(iOS 13.0, *)
var statusBarView: UIView? {
let tag = 3848245
let keyWindow = connectedScenes
.map({$0 as? UIWindowScene})
.compactMap({$0})
.first?.windows.first
if let statusBar = keyWindow?.viewWithTag(tag) {
return statusBar
} else {
let height = keyWindow?.windowScene?.statusBarManager?.statusBarFrame ?? .zero
let statusBarView = UIView(frame: height)
statusBarView.tag = tag
statusBarView.layer.zPosition = 999999
keyWindow?.addSubview(statusBarView)
return statusBarView
}
}
}
有几个有用的属性可以用于自定义 SFSafariViewController:
附言不要忘记使用 CustomSFSafariViewController
而不是 SFSafariViewController
。你可以这样做。
let safariViewController = CustomSFSafariViewController(url: url)