除了标题之外,我们可以向 UINavigation Bar 添加额外的 UILabel 吗?

Posted

技术标签:

【中文标题】除了标题之外,我们可以向 UINavigation Bar 添加额外的 UILabel 吗?【英文标题】:Can we add additional UILabels to UINavigation Bar besides its title? 【发布时间】:2012-01-15 15:05:34 【问题描述】:

我正在开发一个应用程序,我必须在 UINavigation Bar 上显示应用程序的状态。我将使用 UILabel 来显示状态。我想知道这是否可能?

问候, 苏米特

【问题讨论】:

【参考方案1】:

是的。要做的事情是

创建要显示的视图(UIView 的子类),其中包含所有标签。 如果您只想显示一个标签,则不需要第一步,因为您可以直接使用UILabelinitWithCustomView:myLabelsView 的帮助下将您的视图包裹在UIBarButtonItem 中 用你的UIBarButtonItem-instance 在[myViewController.navigationController.navigationItem setRightBarButtonItem:myBarButtonItem animated:NO] 上调用setRightBarButtonItem:animated:

例子:

-(void) viewDidLoad 
    ....
    UIView *myNiceLabelView = [UILabel ...];
    UIBarButtonItem *myBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myNiceLabelView];
    [self.navigationController.navigationItem setRightBarButtonItem:myBarButtonItem animated:NO];
    ....

【讨论】:

【参考方案2】:

我不喜欢看到疯狂的用户界面(而且我认为您的用户也不会喜欢它——导航栏中没有那么多空间或空间可供使用),但是技术上对你的正确答案是是的,你可以

创建一个嵌入了多个标签(或任何您想要的标签)的视图,并将您的UINavigationItemtitleView 属性设置为此。

【讨论】:

【参考方案3】:
UILabel *navLabel = [[UILabel alloc] initWithFrame:CGRectMake(30,20,200,30)];

navLabel.text = @"Your Text";
navLabel.textColor = [UIColor redColor];

[self.navigationController.view addSubview:navLabel];

【讨论】:

【参考方案4】:

你可以在ViewDidLoad中添加这个函数

- (void) setRightNavView

// 替换titleView

CGRect headerTitleSubtitleFrame = CGRectMake(260, 0, 60, 44);
UIView* _headerTitleSubtitleView = [[UILabel alloc] initWithFrame:headerTitleSubtitleFrame];
_headerTitleSubtitleView.backgroundColor = [UIColor clearColor];
_headerTitleSubtitleView.autoresizesSubviews = YES;


CGRect titleFrame = CGRectMake(0, 2, 60, 20);
UILabel *titleView = [[UILabel alloc] initWithFrame:titleFrame];
titleView.backgroundColor = [UIColor clearColor];
titleView.font = [UIFont boldSystemFontOfSize:12];
titleView.textAlignment = NSTextAlignmentCenter;
titleView.textColor = [UIColor blackColor];
titleView.text = @"Balance";
titleView.adjustsFontSizeToFitWidth = YES;
[_headerTitleSubtitleView addSubview:titleView];

CGRect subtitleFrame = CGRectMake(0, 22, 60, 22);
UILabel *subtitleView = [[UILabel alloc] initWithFrame:subtitleFrame];
subtitleView.backgroundColor = [UIColor clearColor];
subtitleView.font = [UIFont boldSystemFontOfSize:15];
subtitleView.textAlignment = NSTextAlignmentCenter;
subtitleView.textColor = [UIColor redColor];
subtitleView.text = @"sdfs";
subtitleView.adjustsFontSizeToFitWidth = YES;
[_headerTitleSubtitleView addSubview:subtitleView];

_headerTitleSubtitleView.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |
                                             UIViewAutoresizingFlexibleRightMargin |
                                             UIViewAutoresizingFlexibleTopMargin |
                                             UIViewAutoresizingFlexibleBottomMargin);

[self.navigationController.navigationBar addSubview:_headerTitleSubtitleView];

那么,你可以在任何你想要的地方设置这个功能:

-(void) setBalanceTop:(NSString*)balance
//NSArray *arrView = self.navigationController.navigationBar.subviews;
//NSLog(@"So view con: %d", (int)arrView.count);
//NSLog(@"Desc: %@", arrView.description);

//这里的索引取决于你的Naviga Controller有多少子视图

if([self.navigationController.navigationBar.subviews objectAtIndex:2] != nil)
    UIView* balanceView = [self.navigationController.navigationBar.subviews objectAtIndex:2];
    UILabel* titleView = [balanceView.subviews objectAtIndex:1];
    NSLog(@"Type class: %@", [titleView description]);
    if((titleView != nil) && ([titleView isKindOfClass:[UILabel class]]))
        titleView.text = balance;

【讨论】:

以上是关于除了标题之外,我们可以向 UINavigation Bar 添加额外的 UILabel 吗?的主要内容,如果未能解决你的问题,请参考以下文章

除了 dbContext 之外,如何向 Blazor 中的服务添加参数?

为啥socketio广播向除了发送它的那个客户端之外的所有客户端发送?

除了 Unity 中的默认字符串和精灵值之外,如何向 Dropdown OptionData 添加更多 UI 元素?

我们可以将 JSON 中的数据返回到除了 ListView 之外的任何东西中吗?

模块化 JavaScript - 除了 CommonJS 和 AMD 之外,还有啥方法可以考虑吗?

我可以向 Outlook 添加自定义“发送”按钮吗?