作者:美丽凍人2502938087 | 来源:互联网 | 2023-01-18 10:33
从iOS 11开始,当我解雇时,我的应用程序中的状态栏是行为不端的.状态栏被取消时,状态栏的背景变为清晰状态.它在iOS 10中没有这样做.
我在一个非常简单的应用程序中重新创建了这个问题,我已经在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
还有其他人遇到过这个问题吗?有修复或解决方法吗?
1> clarus..:
我查看了项目并通过更改您的视图颜色,我能够确定您看到的白色是来自视图的按钮(它是背景颜色).
当您隐藏状态栏时,导航栏仍处于旧位置(现在20像素太低),因此视图的白色背景显示.然后导航栏向上/向上移动,白色消失.
为什么iOS 11中的这种行为发生了变化,我不能说,但在主要iOS更新期间,视图操作背后的机制变化并不罕见.幸运的是,有一个简单的解决方案.
当您为状态栏可见性更改执行动画时,也强制导航栏进行布局.这将导致它正确定位,动画看起来正确.
只需添加最后两行,即可将导航栏布置为切换代码.
- (IBAction)toggleStatusBar {
_statusBarHidden = !_statusBarHidden;
[UIView animateWithDuration:0.35 animations:^{
[self setNeedsStatusBarAppearanceUpdate];
[self.navigationController.navigationBar setNeedsLayout];
[self.navigationController.navigationBar layoutIfNeeded];
}];
}