因此,在iOS 13之前,我设置了NavigationController.NavigationBar.BarStyle来控制状态栏中文本的颜色。但是现在有了新的UINavigationBarAppearance,有什么方法可以控制它吗?我已经尝试过覆盖PreferreddStatusBarStyle,并确保我的plist也包含该设置,但是据我所知,如果您的视图控制器位于UINavigationController内,则不可行。
现在,对于iOS 13,我将使用UINavigationBarAppearance设置导航栏的外观,并设置standardAppearance和scrollEdgeAppearance。
我还试图将NavigationController.NavigationBar.BarStyle设置为UIBarStyle.Black。它是第一次使用,但是由于某种原因,当我返回并再次导航到页面时,设置BarStyle不再有效。
设置文字颜色的正确方法是什么?
答案 0 :(得分:1)
您可以通过以下扩展名更改状态栏文本的颜色:
extension UIApplication {
enum ColorMode {
case dark, light, customColorLowerThanIOS13(_ color: UIColor)
}
func setStatusBarTextColor(_ mode: ColorMode) {
if #available(iOS 13.0, *) {
guard let appDelegate = delegate as? AppDelegate else { return }
var style: UIUserInterfaceStyle
switch mode {
case .dark:
style = .dark
default:
style = .light
}
appDelegate.window?.overrideUserInterfaceStyle = style
} else {
if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView {
var color: UIColor
switch mode {
case .dark:
color = .white
case .light:
color = .black
case .customColorLowerThanIOS13(let customColor):
color = customColor
}
statusBar.setValue(color, forKey: "foregroundColor")
}
}
}
}
使用:
UIApplication.shared.setStatusBarTextColor(.dark)
UIApplication.shared.setStatusBarTextColor(.light)
UIApplication.shared.setStatusBarTextColor(.customColorLowerThanIOS13(.red))
答案 1 :(得分:0)
barStyle在有限的条件下仍然可以工作。您可以使用barStyle或UIBarAppearance,但不能同时使用两者;如果使用大标题,则不能使用barStyle。
当然,只需将UINavigationController子类化,就可以轻松解决问题。有点hacky,但是很容易。
override var childForStatusBarStyle : UIViewController? {
return self.topViewController
}
期望在iOS 13中要做的是,不理会状态栏样式,而是让其根据用户界面样式(亮或暗模式)自动更改。在亮模式下使用亮条颜色,在暗模式下使用暗条颜色,一切都会很好。
答案 2 :(得分:0)
在Info.plist
中,如果添加了布尔属性UIViewControllerBasedStatusBarAppearance
并将其值设置为False
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
您可以通过以下方式更改StatusBar TextColor:
UIApplication.SharedApplication.SetStatusBarStyle(UIStatusBarStyle.LightContent, true);
此外,该方法应在View全部加载后调用。 Apple从IOS 13中将UI
与Controller
分开,这可能会影响PreferredStatusBarStyle
在Controller中的外观。在解决此问题之前,可以使用UIApplication.SharedApplication.StatusBarStyle
进行设置。