从 iOS 11 上的左侧菜单导航后 Xcode 9 导航栏问题不在 iOS 10.3 及更低版本上

Posted

技术标签:

【中文标题】从 iOS 11 上的左侧菜单导航后 Xcode 9 导航栏问题不在 iOS 10.3 及更低版本上【英文标题】:Xcode 9 Navigation bar issue after navigating from Left Side Menu on iOS 11 not on iOS 10.3 and below 【发布时间】:2017-09-29 14:45:01 【问题描述】:

从 Xcode 8 更新到 Xcode 9 后,我注意到导航栏中仅在运行 ios 11 的设备上出现了这种非常奇怪的行为。

从我的左侧菜单导航后会出现此错误,该菜单显示您以模态方式选择的菜单控制器并带有默认演示(即全屏)

我在这里发布了一个视频:https://youtu.be/mgjlbkMi-N8

这似乎是 Xcode 9 上的编译错误。

也在装有 iOS 11 的真机 iPad Pro 上进行了尝试。 使用 Xcode 8.3.3 编译的相同代码按预期工作,而使用 Xcode 9 编译则暴露了该问题。

我在这里放了一个游乐场代码:https://github.com/shadowsheep1/xcode9navigationissue

已经有了解决方法:将演示文稿设置为全屏显示。

但这没有任何意义,这不是预期的操作。

导航栏一旦损坏,应用中的每个导航控制器都会损坏。

有什么想法吗?

编辑:

Apple 开发者关系 2018 年 1 月 23 日晚上 11:13

没有计划 根据以下几点来解决这个问题:

您正在创建一个分离的演示文稿,这会导致多个 要放置在视图层次结构中的导航栏。导航栏 所看到的不是发生推送的地方,因此错误 在显示中。我不知道为什么这在 iOS 10 上没有发生,但它是 那里的配置也无效。

我们建议您使用适当的视图控制器容器来 实现这个菜单,而不是看起来做了什么( IS_SlideMenu_View 被直接放置在窗口中)。

【问题讨论】:

任何带有导航控制器的模态演示都有同样的问题 @akaDuality 我已经在这里bugreport.apple.com 发布了这个错误,到目前为止仍在使用 Xcode 8.3.3 进行编译 @akaDuality 您是通过编程方式还是通过 Interface Builder 的 segue 方式呈现您的视图? 以编程方式 【参考方案1】:

我对普通的UIModalTransitionStyleCoverVertical 也有同样的问题。

我已经通过设置UIModalPresentationOverFullScreenUIModalPresentationOverCurrentContext 解决了。

也许它也对你有帮助。

模态显示的导航示例:

if (@available(iOS 11.0, *)) 
   navController.modalPresentationStyle = UIModalPresentationOverFullScreen;

【讨论】:

这是我在问题中建议的解决方法,但我无法理解这是否是正确的选择,因为 Apple 改变了这种行为,或者这是否是在使用默认演示呈现模态视图时的真正错误以编程方式。我猜这是最后一个场景。无论如何,如果您设置 OverFullScreen,您将拥有不同的 UI 外观,因为下划线视图不会被破坏。 糟糕,我在阅读时没有看到它。你是对的,这种行为非常令人沮丧

以上是关于从 iOS 11 上的左侧菜单导航后 Xcode 9 导航栏问题不在 iOS 10.3 及更低版本上的主要内容,如果未能解决你的问题,请参考以下文章

自定义导航栏切换(从下拉菜单到左侧滑动)

导航栏上的菜单项和导航栏左侧的公司图标

iview左侧导航实现

带有xcode9的ios11中没有显示导航图标?

easyui左侧导航菜单右侧载入百度地图项目框架

XCode 项目导航器错误