【问题标题】:leftBarButtonItem setTitleTextAttributes issue in iOS11iOS11 中的 leftBarButtonItem setTitleTextAttributes 问题
【发布时间】:2017-10-26 14:19:12
【问题描述】:

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

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

我正在初始化一个左栏按钮项,自定义字体如下(在 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 中设置标题文本,一切正常。

任何想法都将不胜感激。

【问题讨论】:

    标签: objective-c iphone uibarbuttonitem ios11


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 2013-02-16
      相关资源
      最近更新 更多