为什么我的NSAttributed String在视图重新出现时会丢失其属性?

时间:2014-08-03 09:21:58

标签: ios fonts uilabel font-awesome nsattributedstring

我在我的应用中使用UIAppearanceProxy,如下所示:

UILabel *label = [UILabel appearance];
label.font = myAppFont;
label.textColor = myAppTextColor;

但有时,我想覆盖默认字体以使用Awesome Font中的字形。我这样做:

    NSString *basePos = [NSString stringWithFormat:@"%d %@", (int)self.user.positives, kUpArrow];
NSMutableAttributedString *posString = [[NSMutableAttributedString alloc] initWithString:basePos];
[posString setAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"FontAwesome" size:18]} range:NSMakeRange([posString length] - 1, 1)];
[self.positivesLabel setAttributedText:posString];

当构建并显示视图时,这很有用,但是如果我导航到另一个页面(我正在使用UIPageViewController)并返回,我的属性就消失了。

我尝试重新设置以下属性:

  • viewWillAppear:
  • viewDidAppear:
  • viewWillLayoutSubviews
  • viewDidLayoutSubviews

......无济于事。该字符串何时重置为默认值?我该如何覆盖呢?

1 个答案:

答案 0 :(得分:0)

同样的事情发生在我身上。

发生这种情况的原因是因为我在font的外观代理上设置了UILabel属性,并且无论出于何种原因,当视图重新出现时超出了属性字符串的属性

我通过在设置font之前将UILabel上的nil属性设置为attributedText来解决此问题。请注意,将font设置为任何字体也可以解决此问题;它不一定需要设置为nil