gpt4 book ai didi

swift - 导航栏的内容在 iOS 13 的模式中部分不可见

转载 作者:行者123 更新时间:2023-12-04 10:58:07 26 4
gpt4 key购买 nike

当导航栏显示在模式屏幕中时,基于 Storyboard的应用程序在呈现导航栏的内容时遇到问题,但仅限于在物理设备上时。代码在 iOS 12 和所有模拟器(iOS 12 和 iOS 13.2.2)中都能正常运行。

comparative screenshot simulator vs physical device

截图左侧是运行iOS 13.2.2的iPhone 11模拟器;右侧是运行相同代码的 iOS 13.2.2 的 iPhone Xs 的 Reflector 投影。我们可以看到物理设备上的 tableview 和导航栏内容之间有一个空格,但在模拟器上,tableview 与导航栏齐平。

没有表格剖面 View 标题,表格 View 边距设置为安全区域。有没有其他人遇到过这个问题,如果有,你是如何解决的?

这是从设备捕获的堆栈 View 的快照,我们可以清楚地看到被错误渲染的区域正好在 UINavigationBar 的边缘内:
Xcode views stack capture

在设置以下 View 结构时,我还能够在一个全新的项目上复制该问题:

Storyboard layout of view structures to replicate the issue

运行此演示项目的代码可在 GitHub 上找到:https://github.com/ekscrypto/stackoverflow-59033294

随着不同的行为:
Demo of minimum reproducible build

我们可以看到物理设备在导航栏的内容和 tableview 之间显示一个红色的栏;但是在模拟器中看不到那个红条。

编辑:2019-11-25 16:45 EDT——根据下面的评论,我尝试使用以下方法强制刷新布局:

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if #available(iOS 13.0, *) {
DispatchQueue.main.async {
self.navigationController?.navigationBar.setNeedsLayout()
self.navigationController?.navigationBar.layoutIfNeeded()
}
}
}

有和没有调度异步,以及有和没有 layoutIfNeeded;它没有为我解决这个特殊问题。

最佳答案

基于 How to prevent gap between uinavigationbar and view in iOS 13? 的回答,这对我不起作用,我使用以下代码解决了我的问题:

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if #available(iOS 13.0, *) {
self.navigationController?.setNavigationBarHidden(true, animated: false)
self.navigationController?.setNavigationBarHidden(false, animated: false)
}
}
或者在 Objective-C 中:
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if(@available(iOS 13, *)) {
[self.navigationController setNavigationBarHidden:true animated:false];
[self.navigationController setNavigationBarHidden:false animated:false];
}
}

关于swift - 导航栏的内容在 iOS 13 的模式中部分不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59033294/

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