objective-c - iOS11 中 leftBarButtonItem setTitleTextAttributes 问题

标签 objective-c iphone uibarbuttonitem ios11

我有一个部署目标为 iOS 9.3 的应用。

我刚刚升级到 Xcode 9.0.1,并且在所有模拟器设备和我自己的运行 iOS11 的 iPhone7 设备上都注意到了这个问题。该问题不会影响运行 < iOS11 的设备。

我正在初始化一个左栏按钮项目,使用自定义字体如下(在 viewDidLoad 中):

UIBarButtonItem *safeModeButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:@selector(toggleSafeMode)];
[safeModeButton setTitleTextAttributes:
 [NSDictionary dictionaryWithObjectsAndKeys:
  [UIFont fontWithName:@"Sosa-Regular" size:31],NSFontAttributeName,
  nil]forState:UIControlStateNormal];
[self.navigationItem setLeftBarButtonItem:safeModeButton];
self.navigationItem.leftItemsSupplementBackButton = YES;

不久之后,在另一种方法中,我将栏按钮标题设置如下:

    self.navigationItem.leftBarButtonItem.title = @"è";

问题是,我在按钮上看到实际的 è 文本,而不是应该呈现的符号。 è 代表“Sosa-Regular”字体,是一个符号。

我之前在Xcode9/iOS11升级之前没有这个问题。我在设置标题之前尝试显式设置 titleTextAttributes,但它总是只显示 è。就好像 titleTextAttributes 不是持久的,或者在 viewDidLoad 之外设置标题会重置按钮的 titleTextAttributes 。如果我在 viewDidLoad 中设置标题文本,一切正常。

任何想法将不胜感激。

最佳答案

玩了一段时间后找到了答案。初始化 UIBarButtonItem 后不久,我将其设置为 enabled = false

由于我只为 UIControlStateNormal 指定了标题文本属性,因此它不适用于 UIControlStateDisabled。奇怪的是这个只出现在iOS11上。因此添加这一行解决了问题:

[safeModeButton setTitleTextAttributes:
 [NSDictionary dictionaryWithObjectsAndKeys:
  [UIFont fontWithName:@"Sosa-Regular" size:31],NSFontAttributeName,
  nil]forState:UIControlStateDisabled];

关于objective-c - iOS11 中 leftBarButtonItem setTitleTextAttributes 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46956799/

相关文章:

iphone - 如何显示 UIMenuController 到 UIBarButtonItem

ios - iOS 7 导航栏上的 UIBarButtonItem setTitlePositionAdjustment

objective-c - 如何检查通过脚本获取的字符串的值?

ios - 动画 - 在 iOS 中绘制一个圆圈 - 不为完整的圆圈制作动画

iphone - 将iPhone 3GS从iOS 4.2.1升级到4.3.x

objective-c - UIButton UIPopUpController 以编程方式

iOS:UISplitViewController 后退按钮设置查询

iphone - '__strong' 仅适用于 objective-c 对象或 block 指针类型;这里输入的是 XXX”警告

ios - 在运行时更新 iOS 应用程序时区

iphone - 如何向 UILabel 的文本添加渐变,而不是背景?