在iOS 11之前,UINavigationBar
按钮和标题正确显示。
昨天我用iOS 11下载了Xcode 9,在没有进行更改的情况下构建和运行后,导航按钮和标题都不再显示了。它显示UINavigationBar
我正在设置正确的颜色,但没有别的。
我尝试了不同的模拟器,我还将iPhone 7更新为iOS 11 beta 5,结果是一样的。什么都没有显示。
有人遇到同样的问题吗?我试过改变代码和故事板的不同部分,但没有任何影响......
使用屏幕截图进行编辑:http://imgur.com/a/Hy46c
提前致谢!
答案 0 :(得分:3)
对于Xcode 9,似乎仅仅设置正在注入navigationItem titleView的自定义视图的帧是不够的。现在必须覆盖并设置titleView的内在内容大小。
这是代码,调整宽度和高度以满足您的需求:
class NavigationBarTitleView: UIView {
override var intrinsicContentSize: CGSize {
return CGSize(width: bounds.width - 100, height: 50)
}
...
}
答案 1 :(得分:1)
我遇到了同样的问题,对我而言,它是由子类化UITabBarController
引起的答案 2 :(得分:1)
你设置了" window,rootViewController = ..."在你的代码?尝试删除它可以解决您的问题
答案 3 :(得分:1)
我在我的项目中遇到了同样的问题,在更新到Xcode 9和iOS 11之后,导航栏中缺少标题。我通过转到故事板上导航控制器的导航栏解决了这个问题,保持了大的偏好标题取消选中并更改标题文本属性下的标题字体,默认情况下,在Xcode 9中将系统0设置为其他选项,如标题1或标题。我也改变了它的儿童观察控制器'导航栏设置对于大型标题为从不而不是自动或始终。
答案 4 :(得分:1)
使用sizeToFit()! ios 11会自动调整大小,但ios 10不会
答案 5 :(得分:1)
我在一些继承的代码库中发现了这段代码,对它进行了评论,并且一切正常,就像在iOS 11.x之前一样。
if (appDelegate.window.rootViewController != self) {
appDelegate.window.rootViewController = self;
}
答案 6 :(得分:0)
尝试使用:
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
或没有外观代理直接设置到当前导航栏...它解决了我的问题,如果Apple在iOS11中将titleText更改为默认值??
如果你想要与iOS 10相同的外观,也可以使用它:
if #available(iOS 11, *) {
nav.navigationBar.prefersLargeTitles = false
}
答案 7 :(得分:0)
导航按钮的相同问题没有显示出来。我通过将renderingMode设置为.alwaysOriginal
来解决它。 (我没有使用模板)
Swift 3代码:
var img =R.image.smt()?.withRenderingMode(.alwaysOriginal)
答案 8 :(得分:0)
我有同样的问题而且以上都没有修复。 虽然,@ Justin Vallely导致我修复它。
我所做的就是在width
上设置一个titleView
,一切正常!
编辑:
每个UIViewController
都有一个navigationItem
属性,每个navigationItem
都有一个可选的titleView
。
供参考:https://developer.apple.com/documentation/uikit/uinavigationitem/1624935-titleview
在我的情况下,我使用自定义titleView
,我认为这是问题的原因,因为Apple更改了API以支持新的导航栏布局。
答案 9 :(得分:0)
根据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和iOS上工作一样Swift版本
答案 10 :(得分:0)
我们遇到了同样的问题,导航栏颜色在那里,但标题和按钮没有显示。在导航控制器出现在屏幕上2秒后,我们通过触发导航栏背景颜色更改来检查条形图,因此我们知道导航栏在那里,我们正在向正确的实例添加按钮。与OP相同,此问题仅出现在iOS 11而非iOS 10上,我们使用的是运行Xcode 9.1的Swift 3.2。
经过几个小时的摆弄,结果是呈现导航控制器,然后将其作为UIApplication.shared.delegate.window.rootViewController(在当前动画之后)导致我们的问题。
如果你只是跳过当前的视图控制器并将导航控制器作为根视图控制器,那么一切正常。当然,在这种情况下你会失去现在的动画。