2014-09-26 25 views
2

在横向模式下,状态栏处于隐藏状态似乎是iOS 8上的一项功能。人们可以get the status bar back,这是很好的,但其实我不反对它被隐藏,只是在我的应用程序的导航栏中有前几名像素处切断,因为你可以在这个模拟器截图中看到:如何在iOS 8上修复横向导航栏项目高度?

iOS 8 landscape orientation cuts off navigation bar pixels

看看齿轮图标如何正好靠在屏幕的顶部?它应该有更多的呼吸空间。

如果我还原状态栏会更好,但如果我可以让导航栏获得更多空间,我不会介意将它放开。研究iOS 8上的Messages应用程序,我发现导航栏高度与我所看到的相同,但撰写按钮变小了。如何更新我的应用程序以减少横向导航栏项目的大小?

回答

2

原来,我已经设置,设置按钮的字体大小(它只是有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

+0

不幸的是,这个解决方案不会从'UIBarButtonItem'中删除_bottom padding_,它不适用于图像。我已经调查过它,但无法找到令人满意的解决方案。有'barButtonItem.ImageInsets'属性可以在横向模式下使用,将图像压低一点。此外,如果您从'UINavigationController'弹出视图并将其推回(仍处于横向模式),则iOS会自动将'UIBarButtonItem'置于'UINavigationBar'中。另一个问题是_backButton_。无法使用ImageInsets属性将其推下。也许这是一个iOS错误。 – tomec 2015-02-19 18:44:25

0

您可能会在错误的位置调整框架。我建议在viewDidLayoutSubviews方法中设置所有框架(即齿轮的框架)。

+0

呃,这一切都在故事板完成的。作为实验的 – theory 2014-09-26 20:15:53

+0

尝试将导航栏的“半透明”属性设置为NO,并查看问题是否仍然存在。 – spybart 2014-09-27 00:25:04

+0

在iOS 8上学习消息应用程序时,我发现导航栏高度与我所看到的相同,但导航项*变小了。*因此,我更新了问题以询问如何执行此操作。 – theory 2014-09-30 18:23:35