在 UINavigationController 中添加带有标题的图像
Posted
技术标签:
【中文标题】在 UINavigationController 中添加带有标题的图像【英文标题】:Adding an Image with a Title in a UINavigationController 【发布时间】:2016-10-19 15:30:57 【问题描述】:我想在 UINavigationController 的标题旁边显示一个小图标。
通过 Photoshop 的魔力,像这样:
我知道我需要创建一个新视图并将图像和标题构建到其中。这是我正在做的事情:
在UINavigationController视图控制器的viewDidLoad中,我调用了方法
[self setTitleBar];
调用此方法:
- (void) setTitleBar
CGRect navBarFrame = self.navigationController.navigationBar.frame;
//UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(navBarFrame.origin.x, navBarFrame.origin.y, (leftButtonFrame.origin.x + leftButtonFrame.size.width) - rightButtonFrame.origin.x, navBarFrame.size.height)];
UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(navBarFrame.origin.x, navBarFrame.origin.y,self.view.frame.size.width,navBarFrame.size.height)];
titleView.backgroundColor = [UIColor clearColor];
CGPoint tvCenter = CGPointMake(titleView.frame.size.width/2, titleView.frame.size.height/2);
UIImage * icon = [UIImage imageNamed:@"star"];
UIImageView *iconView = [[UIImageView alloc] initWithImage:icon];
iconView.frame = CGRectMake(0, 0, icon.size.width, icon.size.height);
UILabel *title = [[UILabel alloc] init];
title.backgroundColor = [UIColor clearColor];
title.textColor = [UIColor whiteColor];
title.textAlignment = NSTextAlignmentCenter;
title.text = @"SOME TITLE";
title.frame = CGRectMake(0, 0, 100, titleView.frame.size.height);
[title sizeToFit];
iconView.center = CGPointMake(tvCenter.x - (icon.size.width/2), tvCenter.y);
[titleView addSubview:iconView];
[titleView addSubview:title];
self.navigationItem.titleView = titleView;
我在titleView中的逻辑是:获取最左边的按钮框架,获取最右边的按钮框架。然后做一些数学计算来计算视图的大小。那应该是titleView的frame size。
但是,我似乎无法让它工作。如果我插入的帧大小为 0,0,100,40;然后它显示框架,但所有内容都被挤压在一起。但是你看到了。我知道 100 应该是动态的以确保显示标题。
但我似乎无法弄清楚。
有什么帮助吗?
【问题讨论】:
使用sizeToFit
。这是文档developer.apple.com/reference/uikit/uiview/…。
导航栏会自动调整视图大小吗?如果是这样,也许你应该在 XIB 中制作它,以便在调整大小时可以轻松查看它的外观。
【参考方案1】:
您可以将对象作为子视图放置在导航控制器视图上。
- (void) setTitleBar
//Let's say your icon size is 20
int starSize = 20;
//Now you'll have to calculate where to place the ImageView respect the TextSize (for this you'll need to know the text and font of your UINavigationItem title)
CGSize textSize = [@"SOME TITLE" sizeWithAttributes:@NSFontAttributeName:[UIFont fontWithName:@"navfontname" size:15]];
UIImageView *startImageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.navigationController.view.frame.size.width/2 - textSize.width/2, self.navigationController.view.frame.size.height/2 - starSize/2, starSize,starSize)];
startImageView.image = [UIImage imageNamed:@"star"];
[self.navigationController.view addSubview:startImageView];
【讨论】:
嗯.. 我似乎无法让它工作。虽然看起来合乎逻辑 是作为子视图添加到 self.navigationController.view 的 UIImageView 吗?如果将其框架设置为 CGRectMake(0,0,20,20) 之类的东西,你能看到它吗? 它将它放在屏幕中间。以上是关于在 UINavigationController 中添加带有标题的图像的主要内容,如果未能解决你的问题,请参考以下文章
在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?
从嵌入在 UINavigationController 中的一个视图控制器到另一个 UINavigationController
(Swift) 在嵌套在 Main UINavigationController 中的 UINavigationController 和 UITabController 之间切换
关闭 UINavigationController 并呈现另一个 UINavigationController
带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller