导航项标题视图 - 所有推送视图控制器都相同

Posted

技术标签:

【中文标题】导航项标题视图 - 所有推送视图控制器都相同【英文标题】:Navigation item title view - same for all pushed view controllers 【发布时间】:2014-03-14 04:23:29 【问题描述】:

如何使所有推送的视图控制器的导航项标题视图保持相同?

例如我想将标题视图设置为所有屏幕都应该可见的徽标。

UIImage *logoImage = [UIImage imageNamed:@"navigation-bar-logo"];
UIImageView *titleLogo = [[UIImageView alloc] initWithImage:logoImage];
self.navigationItem.titleView = titleLogo;

如果我为每个视图控制器单独设置它,ios7 导航栏动画看起来很奇怪。

【问题讨论】:

【参考方案1】:

一种方法是使用 UINavigationItem.titleView 和 UINavigationItem.rightBarButtonItem。像这样:

viewController.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yourimage.png"]];
UIBarButtonItem * item = [[UIBarButtonItem alloc] initWithCustomView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yourimage2.jpg"]]];    
viewController.navigationItem.rightBarButtonItem = item;    

这里我使用 UIImageView 作为自定义视图,但它可以是带有自定义图像的 UIButton。

我建议你的另一种方法是不使用 viewController

// Create your image
UIImage *image = [UIImage imageNamed: @"logo.png"];
UIImageView *imageview = [[UIImageView alloc] initWithImage: image];

// set the text view to the image view
self.navigationItem.titleView = imageview;

希望这些信息对您有所帮助。干杯:)

【讨论】:

这只是解释如何调整单个视图控制器的 titleView,OP 说他们已经在做并且不喜欢结果,它没有解决实际问题。跨度> 【参考方案2】:

如果你想显示一个导航项标题视图 - 所有推送的视图控制器都一样

将 ViewController 作为 ParentViewController 和所有其他 ViewController 作为那个的孩子。那么你将在 ParentVC 中做什么设计,它将反映在 Child VC 中。

下面是例子。 在 appDelegate 类中,

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:[[WARootViewController alloc]init]];
self.window.rootViewController = nav;

在 ViewController 中,设置 imageView 框架(可选,你可以给你想要的)和图像名称(如果 logoImage 给 NULL 内存,请提及扩展名)。

    UIImage *logoImage = [UIImage imageNamed:@"navigation-bar-logo.jpg"];
UIImageView *titleLogo = [[UIImageView alloc] initWithImage:logoImage];
titleLogo.frame = CGRectMake(0, 0, 50, 30);
self.navigationItem.titleView = titleLogo;

将 ViewControllers 的其余部分设为 WARootViewControllers 的子项

#import "WARootViewController.h"
@interface WAFirstViewController : WARootViewController

#import "WARootViewController.h"
@interface WASecondViewController : WARootViewController

【讨论】:

这些不是父/子视图控制器,它们是子类,这是一个重要的区别。这也没有解决 OP 的问题,因为它们仍在单独设置每个视图控制器的 titleView,使得在推送新控制器时看起来很奇怪。

以上是关于导航项标题视图 - 所有推送视图控制器都相同的主要内容,如果未能解决你的问题,请参考以下文章

在动画推送和弹出时,导航项中带有搜索栏的连续视图控制器会导致视图模糊[重复]

如何通过界面生成器更改导航项标题?

Swift iOS - 如何打印导航堆栈中尚未推送的所有子视图控制器的列表

导航控制器不推送新窗口

标签栏控制器中两个标签项的相同视图

如何通过推送通知显示带有 TabBarController 导航的视图控制器