7

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

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

在此处输入图像描述

而且,如您所见,有足够的空间。

有任何想法吗?

4

4 回答 4

7

iOS 9 更新

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

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

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

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

原始答案

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

- (void)viewDidLoad
{
    [super viewDidLoad];
    ...
    [[[self navigationController] navigationBar] setNeedsLayout];
}
于 2013-03-18T15:14:18.533 回答
1

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

于 2013-03-15T21:03:27.287 回答
0

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

于 2013-08-16T22:03:16.217 回答
0

设置标签调用后

label.sizeToFit()
于 2019-09-22T06:11:13.070 回答