繁体   English   中英

导航栏标题和导航按钮未出现在iOS 11上

[英]Navigation bar title and navigation buttons not appearing on iOS 11

在iOS 11之前,正确显示UINavigationBar按钮和标题。

昨天我用iOS 11下载了Xcode 9,在构建和运行之后没有做任何更改,导航按钮和标题都不再显示了。 它显示了我正在设置的正确颜色的UINavigationBar ,但没有别的。

我试过不同的模拟器,我也将iPhone 7更新到iOS 11 beta 5,结果是一样的。 没有显示任何内容。

有人遇到同样的问题吗? 我试过改变代码和故事板的不同部分,但没有影响......

编辑截图: http//imgur.com/a/Hy46c

提前致谢!

对于Xcode 9,似乎仅仅设置正在注入navigationItem titleView的自定义视图的帧是不够的。 现在必须覆盖并设置titleView的内在内容大小。

这是代码,调整宽度和高度以满足您的需求:

class NavigationBarTitleView: UIView {

    override var intrinsicContentSize: CGSize {
        return CGSize(width: bounds.width - 100, height: 50)
    }

    ...

}

使用sizeToFit()! ios 11自动调整大小,但ios 10没有

我有同样的问题,对我而言,它是由子类化UITabBarController引起的

你在代码中设置了“window,rootViewController = ...”吗? 尝试删除它可以解决您的问题

我在我的项目中遇到了同样的问题,在更新到Xcode 9和iOS 11之后,导航栏中缺少标题。我通过转到故事板上导航控制器的导航栏解决了这个问题,保持了首选的大标题和更改标题文本属性下的标题字体,默认情况下,在Xcode 9中将系统0设置为其他选项,如标题1或标题。 我还将其子视图控制器的导航栏设置更改为“从不”,而不是“自动”或“始终”。

我在一些继承的代码库中发现了这段代码,对它进行了评论,并且一切都像iOS 11.x之前那样有效。

if (appDelegate.window.rootViewController != self) {
    appDelegate.window.rootViewController = self;
}

尝试使用:

        UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

或没有外观代理设置直接到当前navigationBar ...它解决了我的问题,如果Apple更改titleText清除为iOS11中的默认值...?

如果你想要与iOS 10一样的外观,也可以使用它:

        if #available(iOS 11, *) {
        nav.navigationBar.prefersLargeTitles = false
    }

有没有显示navigationButton相同的问题。 我通过将renderingMode设置为.alwaysOriginal来解决它。 (我没有使用模板)

Swift 3代码:

var img =R.image.smt()?.withRenderingMode(.alwaysOriginal)

我有同样的问题,并没有上述修复。 虽然,@ Justin Vallely导致我修复它。

我所做的就是在titleView上设置一个width ,一切正常!

编辑:

每个UIViewController都有一个navigationItem属性,每个navigationItem都有一个可选的titleView

供参考: https//developer.apple.com/documentation/uikit/uinavigationitem/1624935-titleview

在我的情况下,我使用自定义titleView ,我认为这是问题的原因,因为Apple更改了API以支持新的导航栏布局。

基于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版本一样

我们遇到了同样的问题,导航栏颜色在那里,但标题和按钮没有显示。 在导航控制器出现在屏幕上2秒后,我们通过触发导航栏背景颜色更改来检查条形图,因此我们知道导航栏在那里,我们正在向正确的实例添加按钮。 与OP相同,此问题仅出现在iOS 11而非iOS 10上,我们使用的是运行Xcode 9.1的Swift 3.2。

经过几个小时的摆弄,结果是呈现导航控制器,然后将其作为UIApplication.shared.delegate.window.rootViewController(在当前动画之后)导致我们的问题。

如果你只是跳过当前的视图控制器并将导航控制器作为根视图控制器,那么一切正常。 当然,在这种情况下你会失去现在的动画。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM