iOS11中的leftBarButtonItem setTitleTextAttributes问题

时间:2017-10-26 14:19:12

标签: 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中设置标题文本,那么一切正常。

任何想法都会受到赞赏。

1 个答案:

答案 0 :(得分:2)

在玩了一会儿之后找到了答案。初始化UIBarButtonItem后不久,我将其设置为enabled = false

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

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