Iphone UINavigationBar标题在使用自定义字体时被截断

Iphone UINavigationBar标题在使用自定义字体时被截断,iphone,ios,ipad,uinavigationbar,Iphone,Ios,Ipad,Uinavigationbar,使用此代码自定义UINavigationBar标题外观后,带有文本的标签将被截断,如下图所示: [[UINavigationBar appearance] setTitleTextAttributes:@{ UITextAttributeTextColor : [UIColor whiteColor], UITextAttributeFont : [UIFont fontWithNam

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

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

正如你所看到的,这里有足够的空间


有什么想法吗?

你可以试着用清晰的背景色和你想要的文本设置制作一个
UILabel
。然后,您可以将此标签设置为iOS 9更新的
UINavigationBar

titleView
属性 我在一个干净的项目中使用了几十种不同大小的内置字体进行了大量测试,我想我可以自信地说,iOS早期版本中发现的标签大小问题已经在iOS 9中(或之前)得到了修复

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

如果在导航栏中明显有足够的可视空间时,仍然看到截断问题,可以尝试以下几项:

  • 删除可能用于解决此问题的任何额外视图。例如,如果您正在创建自己的
    UILabel
    ,并将其设置为导航栏的
    titleView
    ,则可以停止此操作,只需正常设置标题即可
  • 尽可能多地删除调整导航栏大小的代码和标题视图。这包括在下面最初接受的答案中找到的代码
  • 如果您使用的是自定义字体(即iOS中未包含的字体),请验证该字体以确保其未损坏,并包含iOS正确测量该字体所需的所有元数据。如果字体损坏,使用时可能会出现错误

  • 原始答案

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

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

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

    设置标签调用后

    label.sizeToFit()
    

    这不是一个答案,而是根据我自己的经验得出的结论:我也尝试过在导航栏中使用自定义字体,而iOS似乎非常努力地让文本适合一个非常特定的空间。所以我要么得到非常小(高度)的文本,要么像你的例子中的省略号。我的解决方案是使用预渲染的背景图形。没有答案,我知道,但它有效。检查这个。这应该是解决您的问题的替代方法。@bernat请看我的答案……问题没有解决。还有@BlakeSchwendiman,我不能使用图像,因为我的应用程序有很多语言可以刷新导航栏的布局帮助?尝试调用:
    [[[self-navigationController]navigationBar]setNeedsLayout]-viewDidLoad
    方法中的code>。没有什么不同。在viewDidLoad或VIEWWILLEASE中显示图像的相同问题在iOS9上不起作用