使用自定义字体时,UINavigationBar标题会被截断

在使用此代码来自定义UINavigationBar标题外观之后,带有文本的标签将被截断,如下图所示:

[[UINavigationBar appearance] setTitleTextAttributes:@{ UITextAttributeTextColor : [UIColor whiteColor], UITextAttributeFont : [UIFont fontWithName:@"Intro" size:20.0f], UITextAttributeTextShadowColor : [UIColor clearColor] }]; 

在这里输入图像说明

而且,你可以看到,有足够的空间。

有任何想法吗?

iOS 9更新

我在一个干净的项目中做了相当多的testing,其中包含几十种不同大小的内置字体,我想我可以肯定地说,早期版本的iOS中发现的标签大小问题已经被修复(或之前)iOS 9。

原来问题中描述的用例似乎不是可重复的,现在标题标签似乎可以自行调整。 因此,我不认为有必要手动更新布局。

如果您在导航栏中显示大量可视空间的情况下仍然看到截断问题,则可以尝试以下几种方法:

  1. 删除您可能用来解决该问题的任何额外视图。 例如,如果您要创build自己的UILabel并将其设置为导航栏的titleView ,则可以停止执行此操作,只需正常设置标题即可。
  2. 删除尽可能多的代码来调整导航栏和titleView的大小。 这包括下面最初接受的答案中find的代码。
  3. 如果您使用的是自定义字体(即iOS中未包含的自定义字体),请对其进行validation以确保其没有损坏,并包含iOS正确测量所需的所有元数据。 如果字体损坏,使用时可能会显示错误。

原始答复

UINavigationBar布局存在一些已知问题。 尝试在视图控制器出现时和/或在旋转时更新布局。

 - (void)viewDidLoad { [super viewDidLoad]; ... [[[self navigationController] navigationBar] setNeedsLayout]; } 

您可以尝试使用清晰的背景色和所需的文本设置制作UILabel 。 然后,您可以将此标签设置为UINavigationBartitleView属性

如果我首先将标题初始化为一个空string,然后再尝试更新它,我遇到了同样的问题。 调用setNeedsLayout没有修复。 初始化为20个空格字符的空标题解决了我的问题。