如何为iPhone 6 +,6和5指定不同的尺寸?

我希望iPhone 6 +,6和5的每个视图看起来几乎相同。在附图中,我的意思是,例如,“取消”按钮应该是iPhone 5中屏幕左边缘30像素, 6 p中35 px,6+中45 px,其他元素相似。

如何为每种类型的特定约束大小放置? 如果我在约束中使用比例,那么按钮会增长,但它们的大小不受控制,元素之间的空间也不能改变。 具有特定约束大小的大小类我也不能使用,因为cW aH对于5和6个iphone是相同的。 (据我所知)。

我无法弄明白该怎么做。 6和6+的不同设计通常如何管理?

在此处输入图像描述

为什么你需要选择30,35和45px? 是否有理由进行像素化放置?


您可以使用它们的乘法值而不是常量来使用更灵活的约束。

约束根据超视图尺寸自行调整。

iPhone5 iPhone 6 iPhone 6+ iPad iPhone4横向 约束演示

请注意我的中心X对齐约束是如何配置的:

在此处输入图像描述


在此处输入图像描述

您可以看到值的行为有点奇怪,有时乘数> 1,有时它在1和2之间,或者<1取决于First ItemSecond Item的顺序。 您仍然可以通过单击它们并选择Reverse First And Second Item来交换它们的订单。

您无法使用自动布局定位iPhone的特定型号。 这不是为了那个。 构建自动布局是为了避免这种情况。 但是,这里有两个解决方法:

适用于iOS 9及更高版本

使用堆栈视图。 他们非常适合这种布局。

第一种选择

放置一个不可见的UIView并创建附加到Superview顶部,底部,前导和尾随约束。 之后,将您刚刚放置的UIView内的对象(它们可以是UIImageViewsUILabels和列表继续)放置。 现在创建将对象连接到UIView顶部和底部约束。

我创建了一个演示程序来向您展示它是如何完成的。 正如您将看到的,按钮具有不同的大小,具体取决于屏幕的大小。 从此链接下载演示。

第二种选择

您可以通过编程方式创建和修改约束。 创建一个NSLayoutConstraint并根据用户的设备调整它的constant

 var myConstraint = NSLayoutConstraint (item: myButton, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 0) self.view.addConstraint(myConstraint) if UIScreen.mainScreen().bounds.size.width == 375 { // iPhone 6 myConstraint.constant = 10 } else if UIScreen.mainScreen().bounds.size.width == 414 { // iPhone 6+ myConstraint.constant = 15 }