更新为iPhone5制作的XIB,以便与iPhone6和iPhone6 Plus配合使用

时间:2015-01-18 03:37:09

标签: ios objective-c iphone autolayout iphone-6

我在我的应用中创建了几个xib而没有自动布局和大小类。

当我在实际设备上运行应用程序时,它在iPhone6上正常运行,但在iPhone6 Plus视图上却拥抱屏幕的一侧。

所有xib上的元素都设置为使用自动调整大小:

enter image description here

添加有关我的xib如何构建的信息:自动调整大小已经设置为这样,以便当在iOS< iOS上使用应用程序时,视图中的所有对象都保持在相同的位置。 7.0背景图像(覆盖整个视图)位于状态栏下方;在IOS7及以上的背景图像中,状态栏下方可见。这是在应用程序中的所有视图上完成的。

这个问题无论我如何尝试,包括自动布局和xib的大小类都会弄乱一切。是否有任何简单的方法来转换我的视图以使用自动布局,以便可以更改相同的视图(专为iPhone5分辨率设计| iPhone 4英寸),以便它们在iPhone6 Plus分辨率上显示相同?如果自动调整大小保持其设置方式将会很棒。

我尝试过使用多种技术和建议的约束,但图像有时仅在高度上增加(不保持纵横比),背景图像粘在屏幕的一侧,标签尺寸不会增加。 iPhone6和6 Plus分辨率的资产也已添加到项目中。

2 个答案:

答案 0 :(得分:5)

这是我在处理同样问题时发现的:

1)如果您不想使用Autolayout,可以使用比例模式。 Apple在iOS8上添加了这个聪明的小技巧,让所有以前的iPhone 5应用程序在iPhone 6上运行而不进行任何修改。要使用它,你不能在你的项目上设置iPhone 6分辨率的启动图像属性(但您需要为iPhone 5设置图像,以便它知道您支持iPhone 5并且您必须将启动屏幕文件保留为空)。这样做,iOS将在iPhone 6/6 +上运行您的应用程序时使用缩放模式,并且您的所有视图都将正确缩放以与其屏幕一起精美地工作。这是可能的,因为新屏幕保持宽高比到iPhone 5屏幕,所以iOS基本上只需要将您的位置/大小乘以正确的屏幕尺寸比例。 我不确定如果你将iPhone 6的特定分辨率图像设置为某些XIB,它仍然可以工作。

这个解决方案基本上意味着您选择忽略iPhone 6的存在并继续为旧设备编程。

2)如果您真的想放弃自动缩放模式并为iPhone 6制作更新的应用程序(Apple希望您这样做),您可以选择以下任何一种:

  • 使用自动布局。这是Apple希望每个人都使用的标准,虽然一开始有点难以驯服,但你会真正依赖它。我现在已经放弃使用Autolayout了,因为我在尝试在iOS6和7上运行我的应用程序时发现了一些问题,我现在不能不支持它(你可以阅读更多关于它的{{3} })。

  • 使用两个XIB ,一个用于iPhone 4 / 4s / iPod Touch 4,一个用于iPhone 5 / 5s / 6/6 +。请注意,我建议您为Apple设计的每个设备纵横比保留一个XIB。由于使用给定XIB的设备的宽高比将相同,因此您可以使用自动调整遮罩随意扩展视图。一切都会保持正确的宽高比。

我现在正在使用第一个建议(缩放模式),而我在iOS6和7上运行autolayout的问题没有得到解决。

答案 1 :(得分:0)

我认为你使用自动调整大小的掩码是正确的。也许一些调整可以解决你的问题。

您附加的图片是对象的自动调整属性,并预览了此设置的行为方式。

像你一样设置自动调整模板,可以确定对象相对于它的超视图的距离,但是由于你没有设置宽度灵活(框内未选择的箭头),系统将必须在容器的左侧或右侧定位您的对象以解决冲突,并且您的对象可能在左侧(默认行为...您可以在自动调整大小掩码预览小窗口上确认这一点) 。

尝试设置宽度灵活,并确保superview的设置也配置为缩放(灵活的宽度和灵活的高度)。

我从iOS4开始开发一个项目,只使用一个xib为每个屏幕支持iPhone和iPad,只使用autoresize mask属性设置视图比例行为,所以我很确定你能做到这一点太

如果你有相同的布局,请不要使用2个xib。在大多数情况下,这是一个非常糟糕的做法,你会在以后尝试更新布局,添加按钮或任何地方时强调......