我在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>
答案 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];