我的应用程序使用深色导航栏颜色。因此,我将状态栏的颜色设置为白色(因此对比度很好)。
我通过将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默认样式。所以状态栏基本上是不可见的。
我怎样才能解决这个问题?
如果你想为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:
P. S.不要忘记使用CustomSFSafariViewController
而不是SFSafariViewController
。您可以这样做。
let safariViewController = CustomSFSafariViewController(url: url)
有两种方法可以替代ViewController中的preferredStatusBarStyle并返回所需的样式
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .Default
}
或者,您可以使用手动设置
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
您可以通过将SFSafariViewController包装为子类化的UINavigationController来实现这一点。
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];
我有一个应用程序,基于视图控制器的状态栏外观设置为。我的一些视图是深色的,一些视图是浅色的,应用程序有一个相当复杂的视图控制器层次结构,但它可以完美地将适当的方法子类化和重写,并与模式视图(捕捉呈现样式等)相结合。 然而,我需要一种全局的方式来查看顶部的特定项目(在状态栏后面,在我的应用程序边界内),就像顶部的个人热点/GarageBand录音/通话等栏一样。由于栏的背景颜色,我想在显示栏时覆盖状
我有一个视图控制器,这是导航控制器的rootVc。 我需要为rootview控制器隐藏导航栏,因此我使用以下方法来隐藏它并使其重新出现。 我基本上是在rootVc中隐藏导航栏,并为所有其他视图控制器显示它。 但当我移除导航栏时,我看到我的内容正在状态栏下扩展 有办法解决这个问题吗?
标题说明了一切。或者我在理解sdk时有一些非常错误的地方,或者苹果的sdk有一些非常错误的地方。 设置(info.plist)基于视图控制器的状态时..=是的,我可以通过调用setNeedsStatusBarEtc来隐藏我的状态栏动画等等。。。但是,我不能改变我喜欢的风格。当我将其设置为“否”时,我可以更改样式,但不能更改所有其他内容。。我该怎么办?怎么了?请帮帮我! 当基于控制器的状态...=Y
我的项目中有多个故事板。我在一个故事板中有一个主页面浏览量控制器,我在一个单独的故事板中有一个安装视图控制器嵌入导航控制器。现在,当我从主页视图控制器中显示安装视图控制器导航控制器时,状态栏不会隐藏。但是当我将安装视图控制器故事板设置为info.plist中的主故事板文件库,并且安装视图控制器导航控制器是第一个呈现的视图时,状态栏将隐藏。我正在使用下面的代码隐藏状态栏。有人能告诉我当状态视图控制器
还有黑色的图标,可能吗? 谢谢 编辑: M 开发人员预览版中的新增功能:windowLightStatusBar。在主题中打开它会告诉系统使用深色前景,这对于浅色状态栏很有用。请注意,M 预览似乎有一个错误,其中通知图标保持白色,而系统状态图标正确更改为半透明黑色。
我有一个问题,当它涉及到状态栏和隐藏它。 我有一个具有幻灯片菜单的BaseViewController。这个BaseViewController也是应用程序[的根控制器,设置在应用程序中]: 只要我选择一个菜单项,BaseViewController就会被相应的ViewController填充[在我将其嵌入导航控制器之后]。 菜单项A:ViewControllerA 菜单项B: ViewContr