5

我正在制作一个 iPhone 应用程序,并希望在导航栏的 titleview 位置显示一个徽标。我创建了 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。没有标志。Click to push segue:徽标现在出现在 SomeViewController 的栏上,然后消失。我现在正在查看没有徽标的 SomeOtherViewController:。点击返回:SomeViewController 的导航栏仍然有 logo。

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

4

2 回答 2

1

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

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

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

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

于 2012-04-24T22:05:57.427 回答
0

尝试使用

self.navigationItem.titleView = yourCustomView;

而不是

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

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

于 2015-01-19T10:50:43.670 回答