无法设置 UINavigationBar 的标题
Posted
技术标签:
【中文标题】无法设置 UINavigationBar 的标题【英文标题】:Can't set title of UINavigationBar 【发布时间】:2014-04-09 18:15:38 【问题描述】:我想将UINavigationBar
添加到我的根视图并在导航栏上设置标题。
我尝试过使用其他类似问题的很多答案,但都没有奏效。
我正在以编程方式创建整个视图层次结构(因为我使用的是 theos)。 UINavagationBar
在启动应用程序时可见,但它没有标题,即使我同时设置了根视图控制器的标题和导航栏顶部项目的标题。
我的应用程序只有一个主视图,所以导航栏只是出于美观的原因。
应用程序的完整源代码在该行下方。
main.m:
int main(int argc, char **argv)
@autoreleasepool
return UIApplicationMain(argc, argv, @"CapabilitiesEditorApplication", @"CapabilitiesEditorApplication");
CapabilitiesEditorApplication.m:
#import "RootViewController.h"
@interface CapabilitiesEditorApplication: UIApplication <UIApplicationDelegate>
UIWindow *_window;
RootViewController *_viewController;
@property (nonatomic, retain) UIWindow *window;
@end
@implementation CapabilitiesEditorApplication
@synthesize window = _window;
- (void)applicationDidFinishLaunching:(UIApplication *)application
_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
_viewController = [[RootViewController alloc] init];
[_window addSubview:_viewController.view];
[_window makeKeyAndVisible];
@end
RootViewController.h:
@interface RootViewController: UIViewController
@property UINavigationBar *navigationBar;
@end
RootViewController.m:
#import "RootViewController.h"
@implementation RootViewController
- (void)loadView
CGRect appFrame = [[UIScreen mainScreen] applicationFrame];
self.view = [[UIView alloc] initWithFrame:appFrame];
self.view.backgroundColor = [UIColor redColor];
self.title = @"Title1";
self.navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, appFrame.size.width, 44)];
self.navigationBar.topItem.title = @"Title2";
[self.view addSubview:self.navigationBar];
@end
【问题讨论】:
【参考方案1】:问题在于:
self.navigationBar.topItem.title = @"Title2";
因为topItem
是nil
,直到您通过在导航栏上设置items
添加UINavigationItem
。 UINavigationItem
是应该设置title
的位置,然后导航栏会显示它。
UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Title2"];
self.navigationBar.items = @[ item ];
【讨论】:
【参考方案2】:不要添加自己的导航栏。只需将视图控制器作为导航控制器的根即可。
没有必要像你一样覆盖loadView
。并且不要像你一样设置应用的根视图。
尝试以下方法:
- (void)applicationDidFinishLaunching:(UIApplication *)application
_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
_viewController = [[RootViewController alloc] init];
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:_viewController];
_window.rootViewController = nc;
[_window makeKeyAndVisible];
@implementation RootViewController
- (void)viewDidLoad
[super viewDidLoad];
self.view.backgroundColor = [UIColor redColor];
self.title = @"Title1";
@end
【讨论】:
在某些情况下您想添加自己的导航栏,因此 Wain 的回答在这里回答实际问题更有用【参考方案3】:您正在尝试设置 viewController 的标题。只有当您的 viewController 在 UINavigationController 的堆栈中时,它才会起作用。
self.title = @"Title2"; //Will not work if you are trying to use your own NavigationBar.
你应该使用这样的东西:-
navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 64)];
UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Title 2"];
[myNavigationBar pushNavigationItem:item animated:NO];
[self.view addSubview:myNavigationBar];
这就是您可以为导航栏设置标题的方法。如果您还想要 barButtonItem,那么您应该将它们添加到 UINavigationItem 属性的 leftBarButtonItem 和 rightBarButtonItem 中。
【讨论】:
【参考方案4】:试试:
self.navigationItem.title = "myTitle"
【讨论】:
以上是关于无法设置 UINavigationBar 的标题的主要内容,如果未能解决你的问题,请参考以下文章
无法在 UINavigationBar 中重命名或设置新的 backBarButtonItem
无法缩小 UIWebView 和 UINavigationBar 之间的差距
从 UIPageViewContoller 中包含的视图设置 UINavigationBar 标题