你如何设置 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];


覆盖方法viewWillAppearin YourViewController

- (void)viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated] ;
    self.title = @"Sender" ;

【讨论】:

init 方法或YourViewControllerviewDidLoad 方法中设置标题可能是一个更好的主意。将它放在viewWillAppear: 中的问题是,如果视图控制器在其生命周期中出现多次,标题可能会被重置。 @kudoCC 我只希望这个导航栏出现在我的登录屏幕之后我该怎么办? @Pizzy213codes 你能展示你的代码如何呈现视图控制器,以便我可以根据它进行修改。 @KudoCC 它缺少 vc,什么是 vc? @Pizzy213codes vc 是 profileviewController,我的错。【参考方案2】:

您没有看到带有UINavigationBar 的标题的原因是导航栏没有项目,所以topItemnil

您需要创建并设置一个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 上设置图像

UINavigationBar 隐藏按钮文本

如何将透明的“大标题”UINavigationBar 重置为默认外观设置?

如何在 UINavigationBar 上设置自定义按钮?

iPhone - 如何设置 uinavigationbar 高度?

如何以编程方式设置 UINavigationbar 的背景颜色?