导航栏在IOS 13中无法正确显示

时间:2019-09-26 07:44:23

标签: ios objective-c ios13

https://codesandbox.io/s/musing-kapitsa-n8gtj

在这里,我隐藏了默认导航栏并创建了一个自定义导航栏。在使用Xcode 11的iOS 13设备上运行时,显示两个导航栏。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:NO];
}

enter image description here

更新到iOS 13后,导航栏未正确对准屏幕顶部

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

尝试safeAreaLayoutGuide

Apple:版式指南,用于表示视图中未被条形图和其他内容遮挡的部分。

答案 1 :(得分:0)

在视图控制器中,如果要使用全屏并用自己的子类完全覆盖导航栏,请确保在初始化程序中执行此操作,并且视图将显示方法

[self.navigationController setNavigationBarHidden:true动画:true];    [self setExtendedLayoutIncludesOpaqueBars:true];

从那里,您必须访问顶部布局指南的值,该值将分别为44点和20点,具体取决于您以这种方式在loadview或viewdidload或自定义子类中访问的iPhone的大小

UIWindow *窗口= UIApplication.sharedApplication.keyWindow;    CGFloat topPadding = window.safeAreaInsets.top;

然后按以下方式计算自定义导航栏的框架:

CGRect tempRect = CGRectMake(0,0,self.view.frame.size.width,topPadding + 44);

之所以存在44,是因为目前它在所有iPhone和iPad上都是恒定的(将来可能会改变,使此解决方案无效,但这是目前的标准)

,它将为所有iphone尺寸返回正确的尺寸。

THIS => [self setExtendedLayoutIncludesOpaqueBars:true];

按照我的解释,绝对需要进行此工作。这不是走这条路的好主意,因为您很少需要用一些自定义UIView覆盖和替换导航栏,但是如果您需要这样做,这就是您的方法。只需知道,如果您在通话状态和其他极端情况下不更新帧大小,这将会中断。