原来,我已经设置,设置按钮的字体大小(它只是有U+2699
(⚙)为标题)在-viewDidLoad
:
UIBarButtonItem *settingsButton = self.navigationItem.leftBarButtonItem;
[settingsButton setTitleTextAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:28]}
forState:UIControlStateNormal
];
这就是为什么它是在水平方向过大的iOS 8,虽然只是正确的肖像。
要解决此问题,我从-viewDidLoad
删除该代码,并增加了两个新的方法来处理调整其大小:
- (void)setSettingsButtonFontSize:(CGFloat)size {
UIBarButtonItem *settingsButton = self.navigationItem.leftBarButtonItem;
[settingsButton setTitleTextAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:size]}
forState:UIControlStateNormal
];
}
- (void)setSettingsButtonFontSizeForVerticalSizeClass:(UIUserInterfaceSizeClass)sizeClass {
[self setSettingsButtonFontSize:sizeClass == UIUserInterfaceSizeClassCompact ? 20 : 28];
}
第一种方法只将指定的字体大小;第二个选择基于尺寸等级参数的尺寸。
得到它的大小正确,我加入这个代码-viewWillAppear:
:
if ([self respondsToSelector:@selector(traitCollection)]) {
[self setSettingsButtonFontSizeForVerticalSizeClass:self.traitCollection.verticalSizeClass];
} else {
[self setSettingsButtonFontSize:28];
}
所以我得到的iOS 7的原始行为,但在iOS 8时,图标就会尺寸为20时,垂直尺寸班级紧凑。
最后,我添加了新的对iOS的-8的方法来处理旋转:所以现在
- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[super willTransitionToTraitCollection:newCollection withTransitionCoordinator:coordinator];
[self setSettingsButtonFontSizeForVerticalSizeClass:newCollection.verticalSizeClass];
}
,在iPhone上的iOS 8时,齿轮处于横向20和28在纵向。而现在它看起来景观好,不要太拥挤:
![Proper UIBarButtonItem font sizing on iOS 8](https://i.stack.imgur.com/Y7rvC.png)
不幸的是,这个解决方案不会从'UIBarButtonItem'中删除_bottom padding_,它不适用于图像。我已经调查过它,但无法找到令人满意的解决方案。有'barButtonItem.ImageInsets'属性可以在横向模式下使用,将图像压低一点。此外,如果您从'UINavigationController'弹出视图并将其推回(仍处于横向模式),则iOS会自动将'UIBarButtonItem'置于'UINavigationBar'中。另一个问题是_backButton_。无法使用ImageInsets属性将其推下。也许这是一个iOS错误。 – tomec 2015-02-19 18:44:25