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

时间:2013-03-15 20:53:46

标签: iphone ios ipad uinavigationbar

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

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

enter image description here

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

有什么想法吗?

4 个答案:

答案 0 :(得分:7)

iOS 9更新

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

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

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

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

  4. 原始答案

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

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

答案 1 :(得分:1)

您可以尝试使用清晰的背景颜色制作UILabel以及所需的文字设置。然后,您可以将此标签设置为titleView

UINavigationBar属性

答案 2 :(得分:0)

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

答案 3 :(得分:0)

设置标签通话后

label.sizeToFit()