https://codesandbox.io/s/musing-kapitsa-n8gtj
在这里,我隐藏了默认导航栏并创建了一个自定义导航栏。在使用Xcode 11的iOS 13设备上运行时,显示两个导航栏。
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:NO];
}
更新到iOS 13后,导航栏未正确对准屏幕顶部
任何帮助将不胜感激。
答案 0 :(得分:0)
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覆盖和替换导航栏,但是如果您需要这样做,这就是您的方法。只需知道,如果您在通话状态和其他极端情况下不更新帧大小,这将会中断。