为所有设备自动布局 UIImage

Posted

技术标签:

【中文标题】为所有设备自动布局 UIImage【英文标题】:Auto layout a UIImage for all devices 【发布时间】:2014-10-03 15:15:49 【问题描述】:

我正在为各种版本的 iphone 开发应用程序,在我的情况下,我创建了一个文件 .xib 类型和一个大小为 320x480 的视图,在这个视图中,有一个 UIImage 占据了整个视图 (320x480)。

当我在 iphone 4 或 4s 上测试我的应用程序时,屏幕是完美的,但是当我在 iphone 5、5s、6、6 plus 上测试时,是一个巨大的空白区域,并且图像不像 iphone 4 那样全屏显示版本。

为了尝试解决这个问题,我在我的视图和 UIImage 中放置了自动布局,除了将约束添加到我的 UIImage 之外,还向我的超级视图添加了尾随、前导、顶部、底部空间,但这不起作用。

如何解决这个问题,让我的 UIImage 针对每个 iphone 版本扩展或减小?

编辑

这是在 iphone 4、4s 中运行的图像:

这是在 iphone 5、5s 中运行的图像:

为什么顶部和底部有黑色空间?我该如何解决这个问题?并为所有设备全屏显示图像?

【问题讨论】:

是的,这是可以预期的,因为您根据她的父级 (.xib) 将自动布局添加到您的 imageView。为什么不直接在需要添加的地方添加 imageView,而不需要创建额外的 .xib 文件? 我建议您在情节提要中使用大小类。使用紧凑的宽度和任何高度,您可以为所有 iPhone 设置 imageView。 @CarouselMin 这就是问题所在,我正在尝试在没有情节提要的 xib 文件中使用它... @EridBardhaj 我更新了我的问题.. 我写了一个演示,它适用于所有设备。 link 【参考方案1】:

你需要设置约束。

我建议你升级到 Xcode 6,看看新的尺寸等级系统。

使用尺寸等级,您只需处理 4 种情况: 这一切都在这里解释:http://carpeaqua.com/2014/06/14/thinking-in-terms-of-ios-8-size-classes/

关于约束看这个(AutoLayout/ Adaptive UI): http://www.youtube.com/watch?v=p5wD8dvSDbM

如果您不使用自动布局,您的代码中会有一些体积,因为您需要像这样手动设置 UIView 的尺寸(如果方向发生变化,您需要重新调整)

_background = [[UIView alloc] initWithFrame:CGRectMake(0,0,[UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];

【讨论】:

以上是关于为所有设备自动布局 UIImage的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局适应所有设备

如何仅使用一个情节提要为所有 iPhone 设备设计自动布局约束?

使用自动布局的 UIImage 旁边的 UILabel

我应该在 Xcode 6 中使用自动布局还是更喜欢为所有 iOS 设备使用单独的故事板

如何在所有 iOS 设备上设置自动布局?

如何使用固定宽度和自动布局正确缩放图像?