我正在制作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的导航栏仍然有徽标。
显然,我误解了导航控制器的工作原理。有谁能告诉我如何解决这个问题?
答案 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
,我的自定义视图出现了一瞬间然后消失了我不知道在哪里:)