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

Ber*_*nat 7 iphone uinavigationbar ipad ios

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

[[UINavigationBar appearance] setTitleTextAttributes:@{
                            UITextAttributeTextColor : [UIColor whiteColor],
                            UITextAttributeFont : [UIFont fontWithName:@"Intro" size:20.0f],
                            UITextAttributeTextShadowColor : [UIColor clearColor]
                            }];
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

而且,正如您所看到的,还有足够的空间.

有任何想法吗?

mac*_*erv 7

iOS 9更新

我已经在一个干净的项目中进行了一些测试,其中包含几十种不同大小的内置字体,我想我可以肯定地说明早期版本的iOS中发现的标签尺寸问题已经修复(或之前)iOS 9.

原始问题中描述的用例似乎不具有可再现性,标题标签现在似乎可以自行调整大小.因此,我认为不再需要手动更新布局.

如果导航栏中有明显的可视空间,您仍然会看到截断问题,那么您可以尝试以下几种方法:

  1. 删除您可能用于解决问题的所有额外视图.例如,如果您要创建自己的UILabel并将其设置为导航栏titleView,则可以停止这样做,只需正常设置标题即可.
  2. 删除尽可能多的代码来调整导航栏的大小和titleView.这包括在下面最初接受的答案中找到的代码.
  3. 如果您使用的是自定义字体(即iOS中未包含的字体),请对其进行验证以确保其未损坏,并包含iOS正确测量所需的所有元数据.如果字体损坏,使用时可能显示不正确.

原始答案

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

- (void)viewDidLoad
{
    [super viewDidLoad];
    ...
    [[[self navigationController] navigationBar] setNeedsLayout];
}
Run Code Online (Sandbox Code Playgroud)