如何在 iOS 8 上修复横向导航栏项目的高度?
Posted
技术标签:
【中文标题】如何在 iOS 8 上修复横向导航栏项目的高度?【英文标题】:How do I fix the navigation bar item height in landscape on iOS 8? 【发布时间】:2014-11-21 20:59:08 【问题描述】:在横屏模式下隐藏状态栏似乎是 ios 8 的一项功能。可以get the status bar back,这很好,但我实际上不反对隐藏它,只是我的应用程序中的导航栏被截断了顶部的几个像素,正如你在这个模拟器截图中看到的那样:
看到齿轮图标在屏幕顶部的位置了吗?它应该有更多的喘息空间。
如果我恢复状态栏会更好,但如果我可以让导航栏有更多空间,我不介意将其省略。研究 iOS 8 上的 Messages 应用程序,我发现导航栏的高度与我看到的一样,但撰写按钮变小了。如何更新我的应用以减小横向导航栏项目的大小?
【问题讨论】:
【参考方案1】:原来我在-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。现在它在风景中看起来不错,不会太拥挤:
【讨论】:
不幸的是,此解决方案不会从UIBarButtonItem
中删除 底部填充,并且它不适用于图像。我已经对其进行了调查,但未能找到令人满意的解决方案。 barButtonItem.ImageInsets
属性可用于横向模式以将图像推低一点。此外,如果您从 UINavigationController
弹出视图并将其推回(同时仍处于横向状态),则 iOS 会自动将 UIBarButtonItem
居中在 UINavigationBar
中。另一个问题是backButton。无法使用 ImageInsets 属性将其向下推。也许这是一个 iOS 错误。【参考方案2】:
您可能在错误的位置调整框架。我建议在viewDidLayoutSubviews
方法中设置所有框架(即齿轮的框架)。
【讨论】:
作为实验尝试将导航栏的translucent
属性设置为NO,看看问题是否仍然存在。
研究 iOS 8 上的 Messages 应用,我发现导航栏的高度与我看到的一样,但是导航项变小了。 所以我'已更新问题以询问如何做到这一点。以上是关于如何在 iOS 8 上修复横向导航栏项目的高度?的主要内容,如果未能解决你的问题,请参考以下文章