![](/img/trans.png)
[英]White status bar disappears when Navigation bar is visible with Tint Color in iOS 7
[英]Status bar color changed to white in custom navigation drawer in iOS?
我在swift中创建了一个自定义导航抽屉。 我使用了app delegate中的窗口并添加了关于挡风玻璃的视图。 我隐藏后显示按钮单击视图。
下面的代码创建抽屉。
func setupSideMenu(){
windowSideMenu = ((UIApplication.shared.delegate?.window)!)!
windowSideMenu.backgroundColor = UIColor.black
if customView == nil {
print("custom view nil")
// Register Swipe gesture for opening slideMenu
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.openSideMenu))
swipeRight.direction = UISwipeGestureRecognizerDirection.right
self.view.addGestureRecognizer(swipeRight)
/// Register Drawable NIB here only for once
customView = SideView.instanceFromNib() as! SideView
customView.configureDrawer()
customView.navigationController = self.navigationController
customView.frame = CGRect(x: -customView.frame.size.width, y: -10, width: self.view.bounds.size.width - 30, height:UIScreen.main.bounds.height)
customView.drawerDelegate = self
/// BackView (DimView)
backView.frame = self.view.frame
backView.backgroundColor = UIColor.black
backView.alpha = 0.4
backView.isHidden = true
self.view.addSubview(backView)
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.closeSideMenu))
backView.addGestureRecognizer(tapGesture)
customView.isHidden = true
windowSideMenu.addSubview(customView)
windowSideMenu.makeKeyAndVisible()
}
}
在隐藏和显示时,我更改窗口级UIWindowLevel
。
override func openSideMenu() {
super.openSideMenu()
self.windowSideMenu.windowLevel = UIWindowLevelStatusBar
}
override func closeSideMenu() {
super.closeSideMenu()
self.windowSideMenu.windowLevel = UIWindowLevelNormal
}
但是当我将UIWindowLevelStatusBar
更改为UIWindowLevelStatusBar
,状态栏的颜色设置为白色。
对不起,我不得不改变一些颜色,因为我无法显示整个设计。
当我开始理解这个问题时,由于侧面菜单要克服这个问题,我们有一个非常容易定制的库
要设置或更改根,左或右视图控制器或视图,请调用:
sideMenuController.rootViewController = rootViewController
sideMenuController.leftViewController = leftViewController
sideMenuController.rightViewController = rightViewController
sideMenuController.rootView = rootView
sideMenuController.leftView = leftView
sideMenuController.rightView = rightView
希望这个能对您有所帮助
也许是因为你的SideView
有白色背景。 尝试在故事板中更改它
据我所知,你试图让状态栏保持相同的颜色(黑色)。 但是当SlideMenu的窗口级别改变时,它将变为默认的白色。 我也看到你正在设置customView.navigationController = self.navigationController。 navigationController是一个类,所以它通过引用传递而不是通过副本传递,但由于某种原因,导航栏颜色被重置为默认的白色(可能另一个VC的颜色是白色并且正在使用它,在其他颜色中设置颜色)用于确定这是否是原因的VC)在分配导航控制器后尝试重置颜色:
customView.navigationController?.navigationBar.tintColor = UIColor.black
此外,您应该将ui更改为异步,以避免阻塞主线程。 由于UIWindowLevelStatusBar是CGFloat,因此您可以像这样设置它以避免与实际状态栏发生冲突。
DispatchQueue.main.async(execute: {
if let window = UIApplication.shared.keyWindow {
window.windowLevel = UIWindowLevelStatusBar + 1
}
}
DispatchQueue.main.async(execute: {
if let window = UIApplication.shared.keyWindow {
window.windowLevel = UIWindowLevelNormal
}
}
调试器中视图层次结构的屏幕截图也有助于确定根本原因。 希望这有帮助,祝你好运!
您是否尝试在UIWindow
的root view controller
上实现prefersStatusBarHidden
方法? 也许它可以帮助你解决问题。
例如:
- (UIStatusBarStyle) preferredStatusBarStyle {
return UIStatusBarStyleDarkContent;
}
当抽屉菜单出现时,您可以检查此库如何管理显示/隐藏状态栏SlideMenuController.swift ,我认为与您想要的效果相同:( 礼品 )。 我现在正在使用它,它很容易定制。
菜单打开时:
...
DispatchQueue.main.async(execute: {
if let window = UIApplication.shared.keyWindow {
window.windowLevel = UIWindowLevelStatusBar + 1
}
})
菜单关闭时:
...
DispatchQueue.main.async(execute: {
if let window = UIApplication.shared.keyWindow {
window.windowLevel = UIWindowLevelNormal
}
})
希望这会对你有所帮助,问候!
对于你的答案,有不同的可能性..
可能的方式:1
如果您使用的是xcode 9.0+,那么iPhone X在模拟器中可用,并且存在安全视图的新概念,因此您对安全视图给出了顶级约束,因此状态栏后面有此白色条带。 (如果提及与您相关的详细信息,那么解决方案是给主视图的约束而不是safeView)或者您也可以尝试下面的代码..
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
UIApplication.shared.statusBarView?.backgroundColor = UIColor.black
return true
}
可能的方式:2
此幻灯片效果可以使用一个库。 它的名字是SlideMenuControllerSwift
在此库中,可以使用不同的选项,因此您可以更改状态栏。
SlideMenuOptions.contentViewScale = 1.0
SlideMenuOptions.leftViewWidth = UIScreen.main.bounds.size.width * 0.6
let leftVC = UIStoryboard().getViewController(viewController: "LeftView") as! LeftView
let mainVC = UIStoryboard().getViewController(viewController: "MenuView")
let slideMenuController = SlideMenuController(mainViewController: mainVC, leftMenuViewController: leftVC)
SlideMenuOptions.hideStatusBar = false
self.window?.rootViewController = slideMenuController
self.window?.makeKeyAndVisible()
可能的方式:3 因此,将其添加到info.plist中,然后根据您的要求应用以下更改。
因此,从这3种方式尝试任何一种可能它可以帮助您解决您的问题。 快乐编码:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.