几个月前我也遇到了类似的问题 - 我通过在我的AppDelegate
中添加以下代码解决了它。请查看下面的swift代码,我相信你知道objective-c语法:
// Setup general NavBar appearance
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
UINavigationBar.appearance().isTranslucent = true
UINavigationBar.appearance().tintColor = UIColor.white
UIApplication.shared.statusBarStyle = .lightContent // => this would be the solution
我认为最后一行代码会对你很有意思。在你的AppDelegate中设置这些更改非常重要。
我曾经遇到过类似的问题。虽然与 OP 的选项卡栏问题没有直接关系,但我也发现我的半透明状态栏似乎变成了不透明,并且将视图向下推。
在将我的项目从 Swift 3 和 Xcode 8 迁移到 Swift 4 和 Xcode 9 后,我开始遇到同样的问题,即当状态栏可见时,它似乎会将内容向下推。起初,我以为这是我设置的首选 UIStatusBarStyle
的问题(我使用的是 UIStatusBarStyleLightContent
),但它的工作是正确的。
问题在于,在从 Xcode 8 到 9 的迁移中,一个视图控制器中的子视图在 Storyboard 中被放错了位置。之前将该视图固定在视图控制器顶部的约束指向了 View(带边距),而不是顶部布局指南。将此约束更改为使用顶部布局指南并将值设置为 0 解决了我的问题。
didFinishLaunchingWithOptions
方法中将状态栏样式设置为浅色内容。- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[application setStatusBarStyle:UIStatusBarStyleLightContent];
并且在每个视图控制器中返回这个:
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
或者如果您正在使用UINavigationController,则还需要在每个viewController(或创建一个baseViewController)的viewWillAppear方法中添加此行代码
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;
对我来说,以下方法是有效的
final class StatusbarStyle {
static let shared = StatusbarStyle()
var style:UIStatusBarStyle = .default
}
然后每当我需要更改状态栏颜色时,我写以下内容:
StatusbarStyle.shared.style = .default
navigationController?.setNeedsStatusBarAppearanceUpdate()
UITabBar
无关的类似问题。虽然我不确定它是否适用于你,但我还是添加了一个答案。也许它会帮助其他遇到这个问题的人。 - JAL