iOS 10 - 隐藏视图控制器/导航栏标题

iOS 10 - View Controller / Navigation Bar Title hidden

我目前正面临 iOS10.

的奇怪行为

的确,一切正常,但自从我更新到 xCode 8 并开始在 iOS 10 上测试我的应用程序,很多东西都出错了。

例如,我所有的导航栏标题都不再显示了。

更准确地说,当我使用菜单导航我的应用程序时,每次切换到不同的视图时,都没有标题,但是当我按下后退按钮时,我可以在过渡到另一个视图。
我不明白这种新行为,我没有更改代码中的任何内容,当我在 iOS 9 或更低版本上启动应用程序时,一切正常。

我尝试在 ViewWillAppear / ViewDidLoad 中设置标题,在 prepareForSegue , 但没有任何效果。

if ([segue.identifier isEqualToString:kMy_Segue]) {
    MyViewController* destinationVC = segue.destinationViewController;
    [destinationVC setTitle:@"MyTitle"];
}

我觉得推送的导航控制器有一些变化,或者标题项与导航栏本身不在同一个索引处,因为当我在菜单中导航抛出子视图时,标题仅在我按下时出现背部。

例如,我的菜单中有一个名为 "World" 的类别。 当我点击它时,我希望子视图的标题为 "World",但没有显示任何内容。然后,我列出了所有大洲 "Africa""Europe""Asia" 等... 当我点击 Africa 时,我希望下一个标题是 "Africa" 对吗? 再一次,没有任何显示,但是如果我按下后退按钮并返回到大陆列表,标题 "World" 出现。

如果有人遇到过这个问题,我将不胜感激。

您尝试过将导航项添加到您的导航栏吗?您为此设计使用了 Storyboard。

关注这个:

解决方案一

转到 viewController,然后单击 NavigationItem,如下所示:

在右窗格中,更改 "Title" 如下:

解法-2

将 UIView 添加到您的导航栏,如下所示:

将 UILabel 添加到您的 navigationItem,如下所示:

将新添加的UILabel的frame修改如下:

将 UILabel 的文本更改为 "Sample Title",并将 UIView backgroundColor 更改为 clearColor。

我在Xcode8做了一个样例,请查看我下面的GitHublink:

https://github.com/k-sathireddy/NavigationItemSample

我找到了解决问题的办法。真的很奇怪。

主页上的导航栏有淡入淡出的动画。 这是一个滚动视图,所以当我向下滚动时,我仍然可以看到标题和导航栏。

在 iOS < 10 时,淡入淡出动画只改变背景颜色和透明度。但是当我在 iOS 10 上启动应用程序时,淡入淡出效果隐藏了所有内容,菜单图标、标题,所有内容。我相信 Apple 改变了导航栏项目的结构。

此外,当我点击菜单图标导航时,当淡入淡出动画正在进行时,我可以看到标题和导航栏项目在 "fade effect" 下,甚至下一个导航后 ViewControllers 的标题。

所以它工作正常,只是菜单图标、标题等隐藏在导航栏上。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    UIColor * color = [Constants backgroundColor];
    CGFloat offsetY = scrollView.contentOffset.y;
    CGFloat threshold = 250;
    if (offsetY > threshold) {
        [self.navigationController.navigationBar lt_setBackgroundColor:[color colorWithAlphaComponent:1]];
    } else {
        CGFloat alpha =  offsetY / threshold;
        [self.navigationController.navigationBar lt_setBackgroundColor:[color colorWithAlphaComponent:alpha]];
    }
}

我猜问题出在我用来动态更改 NavigationBar 外观的库 LTNavigationBar...