【问题标题】:Custom navbar sizing from iphone 5 to iphone 6从 iphone 5 到 iphone 6 的自定义导航栏大小
【发布时间】:2015-02-25 02:08:48
【问题描述】:

我有一个针对 iphone 5 优化的自定义标签栏。

UINavigationBar *myBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
[self.view addSubview:myBar];

在 iphone 6 上的时候,当然会截掉一部分,因为它只有 320 像素。

我该如何解决这个问题?有没有办法检查它在哪个iphone上运行,然后运行像素指定的代码?我计划稍后在这个导航栏上放一个背景图片,所以它必须居中。

【问题讨论】:

标签: ios iphone size navigationbar iphone-6


【解决方案1】:

一般来说,像这样对维度进行硬编码是个坏主意。如果您旋转,或者在与原始 iPhone 屏幕尺寸不同的屏幕上查看,这将中断。

其中许多控件都有一个默认大小,您可以利用它来发挥自己的优势。与其给它一个框架,不如考虑修改它给你的框架:

UINavigationBar *myBar = [[UINavigationBar alloc] init];
CGRect navBarFrame = myBar.frame;
navBarFrame.size.height // returns the right size for the current OS
navBarFrame.size.width = self.view.frame.size.width;
myBar.frame = navBarFrame;

这种防御性编码有助于让您的应用在许多情况下保持正确布局,包括当您将此控件嵌入父视图控制器或在未来的大屏幕 iOS 设备上查看时。

说了这么多,你确定你不想要UIToolbar吗?通常,您永远不会创建自己的 UINavigationBar,因为该类只是在 UINavigationController 中为您使用。

【讨论】:

  • 如何处理导航栏高度的动态调整,因为它会随着 6 plus 的变化而变化?
  • 您可以处理视图控制器方法willTransitionToTraitCollection:withTransitionCoordinator 并检查特征。在 compact 高度 trait 集合中,导航栏的尺寸通常较小。
【解决方案2】:
UINavigationBar *myBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 50)];
[self.view addSubview:myBar];

也许对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    相关资源
    最近更新 更多