使用自定义字体时,UINavigationBar标题会被截断
在使用此代码来自定义UINavigationBar标题外观之后,带有文本的标签将被截断,如下图所示:
[[UINavigationBar appearance] setTitleTextAttributes:@{ UITextAttributeTextColor : [UIColor whiteColor], UITextAttributeFont : [UIFont fontWithName:@"Intro" size:20.0f], UITextAttributeTextShadowColor : [UIColor clearColor] }];
而且,你可以看到,有足够的空间。
有任何想法吗?
iOS 9更新
我在一个干净的项目中做了相当多的testing,其中包含几十种不同大小的内置字体,我想我可以肯定地说,早期版本的iOS中发现的标签大小问题已经被修复(或之前)iOS 9。
原来问题中描述的用例似乎不是可重复的,现在标题标签似乎可以自行调整。 因此,我不认为有必要手动更新布局。
如果您在导航栏中显示大量可视空间的情况下仍然看到截断问题,则可以尝试以下几种方法:
- 删除您可能用来解决该问题的任何额外视图。 例如,如果您要创build自己的
UILabel
并将其设置为导航栏的titleView
,则可以停止执行此操作,只需正常设置标题即可。 - 删除尽可能多的代码来调整导航栏和
titleView
的大小。 这包括下面最初接受的答案中find的代码。 - 如果您使用的是自定义字体(即iOS中未包含的自定义字体),请对其进行validation以确保其没有损坏,并包含iOS正确测量所需的所有元数据。 如果字体损坏,使用时可能会显示错误。
原始答复
UINavigationBar布局存在一些已知问题。 尝试在视图控制器出现时和/或在旋转时更新布局。
- (void)viewDidLoad { [super viewDidLoad]; ... [[[self navigationController] navigationBar] setNeedsLayout]; }
您可以尝试使用清晰的背景色和所需的文本设置制作UILabel
。 然后,您可以将此标签设置为UINavigationBar
的titleView
属性
如果我首先将标题初始化为一个空string,然后再尝试更新它,我遇到了同样的问题。 调用setNeedsLayout没有修复。 初始化为20个空格字符的空标题解决了我的问题。