我想检查UINavigationItem
的标题是否被截断。
我将标题设置为:self.navigationItem.title = whatever
。
我知道我可以检查UILabel
中的文字是否被截断:
CGSize size = [label.text sizeWithFont:[UIFont fontWithName:@"myfont" size:18.0]];
if (size.width > label.bounds.size.width) {
// set a shorter title
}
我甚至可以找到标题显示的UINavigationItemView
对象,如下所示:
UIView *navItemView;
for (UIView *view in self.navigationController.navigationBar.subviews) {
if ([view isKindOfClass:NSClassFromString(@"UINavigationItemView")]) {
navItemView = view;
}
}
但是我不能将此方法应用于navItemView
因为似乎总是有58的宽度,这比其中的标题要小得多,所以根据它,看起来标题是截断,即使不是。
所以,我的问题归结为:我如何找到UINavigationItem
中显示的标题宽度?
更新:我 找到了我的问题的解决方案,但它并不完全理想,完美或可靠,所以我没有将其标记为答案然而。如果有人有更好的解决方案,请分享。
答案 0 :(得分:2)
我要尝试的是,将UINavigationItemView
转换为UILabel
,使用.text
属性获取其文本,并获取字符串的CGSize
-sizeWithFont:constrainedToSize:
UILabel *navItemView;
for (UIView *view in self.navigationController.navigationBar.subviews) {
if ([view isKindOfClass:NSClassFromString(@"UINavigationItemView")]) {
navItemView = (UILabel*)view;
CGSize theSize = [navItemView.text sizeWithFont:[UIFont systemFontOfSize:navItemView.font.systemFontSize] constrainedToSize:260 lineBreakMode:UILineBreakModeWordWrap];
}
}
现在,您可以使用.width
的{{1}}属性来查找文字的宽度。
注意:这在理论上讲,未经过测试。我希望它有效!期待您如何使用它。 =)
答案 1 :(得分:1)
终于找到了解决方案:
self.navigationItem.title = title;
CGFloat titleWidth = 320 - (5.0 + self.navigationItem.backBarButtonItem.width + 10.0 + 10.0 + self.navigationItem.rightBarButtonItem.width + 5.0);
if ([self.navigationItem.title sizeWithFont:[UIFont fontWithName:@"myfont" size:18.0]].width > titleWidth) {
self.navigationItem.title = aShorterTitle;
}
说明:titleWidth
是手动计算导航栏中标题剩余的空间量。换句话说:
导航栏的总宽度(320) - (后退按钮和屏幕左侧之间的间隙大小(5)+后退按钮的宽度+后退按钮和标题之间的间隙大小(10)+标题之间的间隙大小和右边的按钮(10)+右边的按钮的宽度+右边的按钮和屏幕右边的间隙的大小(5))
注意:差距大小(5& 10)是手动测量的,并且对像素是准确的,但Apple可能会在软件版本之间稍微改变它们,因此这可能并不总是精确。
另请注意:此解决方案适用于纵向模式的导航栏,后退按钮和右侧栏按钮。如果你的不同,你必须手动调整它。
正如您所看到的,这是不一个完美的解决方案,所以如果有人有更好的解决方案,请分享。