原来我在-viewDidLoad 中设置了那个设置按钮的字体大小(它的标题只有U+2699 (⚙)):
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。
最后,我添加了 new-to-iOS-8 方法来处理旋转:
- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[super willTransitionToTraitCollection:newCollection withTransitionCoordinator:coordinator];
[self setSettingsButtonFontSizeForVerticalSizeClass:newCollection.verticalSizeClass];
}
所以现在,在 iPhone 上的 iOS 8 上,横向齿轮为 20,纵向齿轮为 28。现在它在风景中看起来不错,不会太拥挤: