iOS 11 上未显示导航栏标题和导航按钮
Posted
技术标签:
【中文标题】iOS 11 上未显示导航栏标题和导航按钮【英文标题】:Navigation bar title and navigation buttons not appearing on iOS 11 【发布时间】:2017-08-18 07:53:51 【问题描述】:在 ios 11 之前,UINavigationBar
按钮和标题可以正确显示。
昨天我下载了带有 iOS 11 的 Xcode 9,在构建和运行而不做任何更改之后,导航按钮和标题都不再显示。它以我设置的正确颜色显示UINavigationBar
,但仅此而已。
我尝试了不同的模拟器,并且我将 iPhone 7 更新到了 iOS 11 beta 5,结果是一样的。什么都没有显示。
有人遇到过同样的问题吗?我尝试更改代码和情节提要的不同部分,但没有任何影响...
用截图编辑:http://imgur.com/a/Hy46c
提前致谢!
【问题讨论】:
这是否可以附加您的项目或代码或屏幕截图或其他 @Anbu.Karthik 我上传了几张截图,说明该项目是私有的。他们来了:imgur.com/a/Hy46cnavigationbar.prefersLargeTitles=NO;
OR navigationbar.prefersLargeTitles=YES;
根据要求就可以了。
更多信息:这似乎是 Xcode 9 的东西,而不是 iOS 11。我们已经将我们的 iOS 11 版本从 Xcode 8 和 Xcode 9 构建到 iOS 11 设备。只有 Xcode 9 版本存在问题。
这些ios11导航栏bug实在是太烦人了。我想破坏一些东西。
【参考方案1】:
对于 Xcode 9,似乎仅设置注入到 navigationItem titleView 中的自定义视图的框架已经不够了。您的 titleView 的内在内容大小现在也必须被覆盖和设置。
这是代码,调整宽度和高度以满足您的需求:
class NavigationBarTitleView: UIView
override var intrinsicContentSize: CGSize
return CGSize(width: bounds.width - 100, height: 50)
...
【讨论】:
【参考方案2】:使用 sizeToFit()! ios 11 会自动调整大小,但 ios 10 不会
【讨论】:
【参考方案3】:我遇到了同样的问题,对我来说这是由子类化 UITabBarController 引起的
【讨论】:
我也继承了 UITabBarController。我在 UITabar 中遇到图像和标题的问题,文本会覆盖图像 而具体的原因是我用它来维护旧的iOS标签栏样式: - (UITraitCollection *)traitCollection return [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact]; 【参考方案4】:您是否在代码中设置了“window,rootViewController = ...”?尝试删除它可以解决您的问题
【讨论】:
哦,天哪,你救了我的命去努力修复它。【参考方案5】:我在我的项目中遇到了同样的问题,在更新到 Xcode 9 和 iOS 11 后,导航栏中的标题丢失了。我通过转到故事板上导航控制器的导航栏解决了这个问题,并保持 Prefers Large未选中标题并更改标题文本属性下的标题字体,该属性在 Xcode 9 到系统 0 中默认设置为其他选项,如标题 1 或标题。我还将其子视图控制器的导航栏设置“大标题”更改为“从不”而不是“自动”或“始终”。
【讨论】:
【参考方案6】:我在一些继承的代码库中找到了这段代码,将其注释掉,一切都和 iOS 11.x 之前一样。
if (appDelegate.window.rootViewController != self)
appDelegate.window.rootViewController = self;
【讨论】:
【参考方案7】:尝试使用:
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
或者没有外观代理设置直接到当前的navigationBar...它解决了我的问题,Apple 是否应该将titleText 更改为iOS11 中的默认清除...?
如果您想要与 iOS 10 相同的外观,也可以使用它:
if #available(iOS 11, *)
nav.navigationBar.prefersLargeTitles = false
【讨论】:
感谢您的回答,但它不起作用...在进行更改之前,您说,UINavigationBar
的 titleTextAttributes
是 NSColor
和 TextColor
设置为 UIExtendedGrayColorSpace 1 1
。添加NSForegroundColorAttributeName
后,只有属性NSColor
与之前的值相同...
经过一番研究,UIExtendedGrayColorSpace 1 1
等于white
,所以它已经是正确的颜色...【参考方案8】:
没有显示导航按钮也有同样的问题。我通过将renderingMode设置为.alwaysOriginal
解决了这个问题。 (我没有使用模板)
Swift 3 代码:
var img =R.image.smt()?.withRenderingMode(.alwaysOriginal)
【讨论】:
【参考方案9】:我遇到了同样的问题,但以上都没有解决。 虽然,@Justin Vallely 引导我修复它。
我所做的只是在titleView
上设置width
,一切正常!
编辑:
每个UIViewController
都有一个navigationItem
属性,每个navigationItem
都有一个可选的titleView
。
供参考:https://developer.apple.com/documentation/uikit/uinavigationitem/1624935-titleview
就我而言,我使用的是自定义 titleView
,我认为这是问题的原因,因为 Apple 更改了 API 以支持新的导航栏布局。
【讨论】:
什么titleView? 视图控制器上的那个 (UIViewController.navigationItem.titleView
)
在 titleView 上设置宽度并没有解决我的问题。我什至尝试过 intrinsicContentSize 都没有成功。
您能提供更多上下文吗?
好的,我解决了我的问题,我有标签栏和导航栏,我的标签栏按钮与标签栏项目的新样式重叠。所以我添加了一个特征集合类,如下所述:***.com/questions/44822558/…。我没有意识到,它破坏了我的导航栏,现在我使用了同一篇文章中提到的稍微不同的解决方案,一切正常。【参考方案10】:
根据 Justin Vallely 的评论,我对代码进行了一些修改,以确保正确调整视图大小:
class NavigationBarTitleView: UIView
private var width: CGFloat = 0.0
private var height: CGFloat = 0.0
override init(frame: CGRect)
super.init(frame: frame)
width = frame.width
height = frame.height
required init?(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
override var intrinsicContentSize: CGSize
return CGSize(width: width, height: height)
在我的特殊情况下,我将此视图用作 UISearchBar 的容器,现在它的大小合适,并且可以与 Swift 4 和 iOS 11 完美配合,就像以前在以前的 iOS 和 Swift 版本上工作一样
【讨论】:
【参考方案11】:我们遇到了同样的问题,导航栏颜色存在,但标题和按钮未显示。我们通过在导航控制器出现在屏幕上 2 秒后触发导航栏背景颜色更改来仔细检查该栏是否存在,因此我们知道导航栏存在并且我们正在向正确的实例添加按钮。和 OP 一样,这个问题只出现在 iOS 11 而不是 iOS 10,我们使用的是运行 Xcode 9.1 的 Swift 3.2。
经过几个小时的摆弄,事实证明,呈现一个导航控制器,然后将其设置为 UIApplication.shared.delegate.window.rootViewController(在当前动画之后)导致了我们案例中的问题。
如果您只是跳过当前视图控制器并将导航控制器作为根视图控制器,那么一切正常。当然,在这种情况下你会失去现在的动画。
【讨论】:
以上是关于iOS 11 上未显示导航栏标题和导航按钮的主要内容,如果未能解决你的问题,请参考以下文章
UIDocumentPicker 导航栏按钮在 iOS 11 中隐藏