导航栏上的titleview在segues之后的视图中不可见

时间:2012-04-24 22:01:26

标签: iphone ios xcode navigationbar

我正在制作iPhone应用程序,并希望在导航栏的标题视图位置显示徽标。我已经创建了UINavigationController的子类,并在viewDidLoad中添加了以下行:

self.navigationBar.topItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"titlelogo.png"]];

(这可能看起来只是一行的浪费,但我在多个地方使用它,我不想出于各种原因使用[UINavigationBar外观])

这适用于导航控制器的直接孩子 - 我看到了徽标。但是,当我将segue推到另一个视图时,徽标不会延续,即使它们(据我所知)是“相同”导航控制器的一部分。

(供参考) - > MyNavigationController - > SomeViewController - > SomeOtherViewController

我还尝试使用:

进入SomeOtherViewController的viewDidLoad
 self.navigationController.navigationBar.topItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"titlelogo.png"]];

这仍然没有显示徽标。

经过一番探讨,我发现如果1)我在导航控制器的viewDidLoad中没有该行,2)我在SomeOtherViewController的viewDidLoad中有第二行,那么:

开始:查看SomeViewController。没有标志。 点击推送segue:徽标现在出现在SomeViewController的栏上,然后消失。 我现在正在查看SomeOtherViewController:它没有徽标。 点击返回:SomeViewController的导航栏仍然有徽标。

显然,我误解了导航控制器的工作原理。有谁能告诉我如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,你也可以用另一种方法来做,只需用图像替换整个 NavigationBar ?在那里你可以放置你的图标。

因为更改整个NavigationBar非常容易。

if ([self.navigationBar respondsToSelector:@selector( setBackgroundImage:forBarMetrics:)]) {
  [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navigationbar.png"] forBarMetrics:UIBarMetricsDefault];
}

您需要将此代码放入 NavigationController viewDidLoad方法中。然后它也应该在ViewControllers中工作,你可以推送NavigationController的堆栈。

答案 1 :(得分:0)

尝试使用

self.navigationItem.titleView = yourCustomView;

而不是

self.navigationController.navigationBar.topItem.titleView = yourCustomView;

根本不要触碰self.navigationController.navigationBar.topItem.titleView。起初我尝试将它们都设置为yourCustomView,我的自定义视图出现了一瞬间然后消失了我不知道在哪里:)