gpt4 book ai didi

ios - 在 iOS 11 上隐藏时状态栏背景消失

转载 作者:可可西里 更新时间:2023-11-01 03:30:59 27 4
gpt4 key购买 nike

从 iOS 11 开始,我的应用程序中的状态栏在我关闭时出现异常。状态栏消失时状态栏背景变清。它在 iOS 10 中没有这样做。

status bar bug

我在一个非常简单的应用程序中重现了这个问题,并将其上传到 Github:TestStatusBarBug .以下是所有相关代码:

AppDelegate.m

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[UINavigationBar appearance] setBarTintColor:[UIColor grayColor]];
return YES;
}

@end

ViewController.m

#import "ViewController.h"

@interface ViewController () {
BOOL _statusBarHidden;
}

@end

@implementation ViewController

-(BOOL)prefersStatusBarHidden
{
return _statusBarHidden;
}

-(UIStatusBarAnimation)preferredStatusBarUpdateAnimation
{
return UIStatusBarAnimationSlide;
}

- (IBAction)toggleStatusBar {
_statusBarHidden = !_statusBarHidden;

[UIView animateWithDuration:0.35 animations:^{
[self setNeedsStatusBarAppearanceUpdate];
}];
}

@end

有没有其他人遇到过这个问题?是否有修复或解决方法?

最佳答案

我查看了该项目并通过更改您的 View 颜色,我能够确定您看到的白色来自带有按钮的 View (它是背景颜色)。

当您隐藏状态栏时,导航栏仍位于其旧位置(现在太低 20 像素),因此 View 的白色背景会显示出来。然后导航栏布局/向上移动,白色消失。

为什么这种行为在 iOS 11 中发生了变化,我不能说,但在主要的 iOS 更新期间, View 操作背后的机制发生变化并不罕见。幸运的是,有一个简单的解决方案。

当您为状态栏可见性更改制作动画时,还强制导航栏进行布局。这将使它正确定位并且动画看起来正确。

只需将最后两行添加到您的切换代码中即可布置导航栏。

- (IBAction)toggleStatusBar {
_statusBarHidden = !_statusBarHidden;

[UIView animateWithDuration:0.35 animations:^{
[self setNeedsStatusBarAppearanceUpdate];
[self.navigationController.navigationBar setNeedsLayout];
[self.navigationController.navigationBar layoutIfNeeded];
}];
}

关于ios - 在 iOS 11 上隐藏时状态栏背景消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46258242/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com