你如何设置 UINavigationBar 的标题
Posted
技术标签:
【中文标题】你如何设置 UINavigationBar 的标题【英文标题】:How do you set the title for UINavigationBar 【发布时间】:2014-04-25 01:29:32 【问题描述】:我有一个基于选项卡的应用程序,我正在尝试更改 UINavigationBar 的标题,当单击一个按钮时会加载一个新的 Uiview 但没有显示!
我这样创建栏:
navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, screenWidth, 60)];
navBar.barTintColor = [UIColor colorWithRed:0.082 green:0.118 blue:0.141 alpha:1.0];
navBar.tintColor = [UIColor whiteColor];
navBar.translucent = NO;
[self.view addSubview:navBar];
然后在方法中我尝试改变:
UIView *sendASongView = [[UIView alloc] init];
[sendASongView setFrame: CGRectMake(0, 60, screenWidth, screenHeight-110)];
[sendASongView setBackgroundColor:[UIColor whiteColor]];
[self.view addSubview:sendASongView];
navBar.topItem.title = @"Send";
【问题讨论】:
您应该创建一个UINavigationController
并将其用作您的viewController 的容器。然后你可以设置标题self.title = @"Send"
。
@KudoCC 你能告诉我它是怎么做的吗?我对 ios 很陌生,谢谢!
如何制作和添加UINavigationController
到您的应用程序实际上取决于您应用程序的其余部分。如果您在情节提要中创建标签栏控制器,您应该只添加一个导航控制器作为标签之一。
您使用的是 Storyboard 还是 xib 或两者都不使用?
@KudoCC none,以编程方式做所有事情
【参考方案1】:
您可以创建一个 UINavigationController 并将其用作 viewController 的容器。
- (void)loginViewShowingLoggedInUser:(FBLoginView *)loginView
self.statusLabel.text = @"You're logged in as";
HomeNavViewController *profileviewController = [[HomeNavViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController: profileviewController] ;
CATransition *transition = [CATransition animation];
transition.duration = 0.3;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromRight;
[self.view.window.layer addAnimation:transition forKey:nil];
[self presentModalViewController:nav animated:NO];
覆盖方法viewWillAppear
in YourViewController
- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated] ;
self.title = @"Sender" ;
【讨论】:
在init
方法或YourViewController
的viewDidLoad
方法中设置标题可能是一个更好的主意。将它放在viewWillAppear:
中的问题是,如果视图控制器在其生命周期中出现多次,标题可能会被重置。
@kudoCC 我只希望这个导航栏出现在我的登录屏幕之后我该怎么办?
@Pizzy213codes 你能展示你的代码如何呈现视图控制器,以便我可以根据它进行修改。
@KudoCC 它缺少 vc,什么是 vc?
@Pizzy213codes vc 是 profileviewController,我的错。【参考方案2】:
您没有看到带有UINavigationBar
的标题的原因是导航栏没有项目,所以topItem
是nil
。
您需要创建并设置一个UINavigationItem
。
navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, screenWidth, 60)];
navBar.barTintColor = [UIColor colorWithRed:0.082 green:0.118 blue:0.141 alpha:1.0];
navBar.tintColor = [UIColor whiteColor];
navBar.translucent = NO;
UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Send"];
navBar.items = @[ item ];
UIView *sendASongView = [[UIView alloc] init];
[sendASongView setFrame: CGRectMake(0, 60, screenWidth, screenHeight-110)];
[sendASongView setBackgroundColor:[UIColor whiteColor]];
[self.view addSubview:sendASongView];
当然,将您的视图控制器放在UINavigationController
中可能是一个更好的主意,但上面解释了问题的原因。
【讨论】:
以上是关于你如何设置 UINavigationBar 的标题的主要内容,如果未能解决你的问题,请参考以下文章
如何将透明的“大标题”UINavigationBar 重置为默认外观设置?