当呈现UIAlertController时,UIBarButtonItem丢失自定义外观属性

时间:2016-05-03 21:41:41

标签: ios uinavigationbar uibarbuttonitem uialertcontroller

我在UINavigationBar中有一个UIBarButtonItem,它有一些自定义外观属性(自定义字体,颜色)。它通常出现在应用程序的大多数地方。

但是,当使用此按钮在视图控制器上显示具有ActionSheet样式的UIAlertController时,BarButton会丢失其自定义字体外观,导致按钮上出现奇怪的“跳转”并显示错误的字体,在这里可以看到:http://giphy.com/gifs/puopiq9mPyI2Q/html5

我认为这可能与我们如何设置BarButton外观有关,AppDelegate中包含以下代码:

NSDictionary *btnAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                    [UIColor      whiteColor],NSForegroundColorAttributeName,
                                    [AppearanceConstants mediumFontSize20],         NSFontAttributeName,nil];
    [[UIBarButtonItem appearance] setTitleTextAttributes:btnAttributes forState:UIControlStateNormal];

我的猜测是条形按钮不在UIControlStateNormal中,但是对于我来说,无论如何我都不知道在呈现AlertController时BarButton处于什么状态,只是试图设置标题文本属性每个控制状态的适当值都不起作用。

当我执行此操作后导航到导航栏中带有BarButtonItems的其他视图控制器时,它们仍然具有正确的外观,如果我之后返回有问题的屏幕,它将具有正确的外观,直到再次呈现AlertController。 / p>

1 个答案:

答案 0 :(得分:2)

我在演示ActionSheet后重置了样式

UIAlertController *alertVC = ... 

[self presentViewController:alertVC animated:YES completion:^{
    [self.navigationItem.leftBarButtonItem setDefaultAppearanceForSpecificItem];
    [self.navigationItem.rightBarButtonItem setDefaultAppearanceForSpecificItem];
}];

我在UIBarButtonItem上创建了一个类别来帮助我

[self setTitleTextAttributes:@{
        NSFontAttributeName: [UIFont systemFontOfSize:14],
        NSForegroundColorAttributeName: [UIColor VKBlueColor]
} 
forState:UIControlStateNormal];