首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UINavigationItem titleView职位

UINavigationItem titleView职位
EN

Stack Overflow用户
提问于 2010-06-27 03:29:05
回答 7查看 27.5K关注 0票数 15

我使用UINavigationItem的titleView属性来设置一个具有我想要的字体大小/颜色的自定义UILabel。下面是我的代码:

代码语言:javascript
复制
self.headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 400.0, 44.0)];
self.headerLabel.textAlignment = UITextAlignmentCenter;
self.headerLabel.backgroundColor = [UIColor clearColor];
self.headerLabel.font = [UIFont boldSystemFontOfSize:20.0];
self.headerLabel.textColor = [UIColor colorWithRed:0.259 green:0.280 blue:0.312 alpha:1.0];
self.navigationItem.titleView = self.headerLabel;

在导航栏中,我还有一个左栏按钮。结果是:文本没有正确居中。我尝试设置标签的x原点,但没有效果。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-06-27 03:41:24

如果您将headerLabel设置为titleView的子视图,则可以设置headerLabel的框架来控制它在titleView中的位置。

以你现在的方式,你不能控制它。我认为操作系统会根据可用的空间为你选择titleView的框架。

希望这能有所帮助!

票数 15
EN

Stack Overflow用户

发布于 2011-10-26 19:47:24

只需使用init并将[self.headerLabel sizeToFit]放在最后一行代码之后,就可以代替initWithFrame

票数 19
EN

Stack Overflow用户

发布于 2012-03-02 05:45:30

我在应用商店中的每个应用中都使用了导航栏的自定义标题标签。我测试了许多不同的方法,到目前为止,在导航栏中使用自定义标签的最简单方法是完全忽略titleView,直接将标签插入到navigationController.view中。

使用这种方法,很容易让标题标签的框架始终与导航栏的框架相匹配--即使您使用的是具有非标准大小的自定义navBar。

代码语言:javascript
复制
- (void)viewDidLoad {
   [self.navigationController.view addSubview:self.titleLabel];
   [super viewDidLoad];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:
             (UIInterfaceOrientation)interfaceOrientation {
   return YES;
}

- (void)didRotateFromInterfaceOrientation:
             (UIInterfaceOrientation)fromInterfaceOrientation {
   [self frameTitleLabel];
}

- (UILabel *) titleLabel {
   if (!titleLabel) {
      titleLabel = [[UILabel alloc]           
          initWithFrame:self.navigationController.navigationBar.frame];

       titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:18];
       titleLabel.text = NSLocalizedString(@"Custom Title", nil);
       titleLabel.textAlignment = UITextAlignmentCenter;
       titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
   }
   return titleLabel;
}

- (void) frameTitleLabel {
   self.titleLabel.frame = self.navigationController.navigationBar.frame;
}

这种方法的一个警告是,如果您不小心将标题设置得太长,您的标题可能会超出navBar中任何按钮的顶部。但是,国际海事组织,这比1)当你有一个rightBarButton时标题不能正确居中或2)如果你有一个leftBarButton标题不显示的问题要小得多。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3125245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档