如何在iOS 8上修复横向导航栏项目高度?

时间:2014-09-26 18:56:42

标签: ios iphone uinavigationbar statusbar landscape

iOS 8上的一项功能似乎是在横向模式下隐藏状态栏。一个人可以get the status bar back,这很好,但实际上我并不反对它被隐藏,除了我的应用程序中的导航栏有几个像素切断,你可以在这个模拟器截图中看到:

iOS 8 landscape orientation cuts off navigation bar pixels

查看齿轮图标是如何直接靠近屏幕顶部的?它应该有更多的喘息空间。

如果我恢复状态栏会更好,但是如果我可以让导航栏有更多的空间,我不介意把它留下来。研究iOS 8上的Messages应用程序,我看到导航栏高度与我看到的相同,但是撰写按钮变小了。如何更新我的应用以减少横向中导航栏项目的大小?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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