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

Posted

技术标签:

【中文标题】如何为 iPhone 6+、6 和 5 指定不同的尺寸?【英文标题】:How to specify different sizes for iPhone 6+, 6 and 5? 【发布时间】:2015-01-22 16:22:07 【问题描述】:

我想让 iPhone 6+、6 和 5 上的视图看起来几乎相同。 在附图中,我的意思是,例如,“取消”按钮应该距离 iPhone 5 的屏幕左边缘 30 像素,6 的 35 像素和 6+ 的 45 像素,其他元素类似。

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

我不知道该怎么做。 现在通常如何管理 6 岁和 6 岁以上的不同设计?

【问题讨论】:

ios8 的自适应界面上观看 WWDC 视频。 完成了,但没有找到适合我的案例的答案 :( 我不使用 ipad 也不旋转视图。只想为不同的 iphone 指定元素之间的空格。 你可以在这里查看我的答案:***.com/a/37325714/2477632 【参考方案1】:

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

为 iOS 9 及更高版本更新

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

第一个选项

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

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

第二个选项

您可以通过编程方式创建和修改约束。创建一个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

【讨论】:

cough 作为一般规则,永远不要根据 EDIT 对浮点数进行直接比较。在这种情况下,可能会在 6 到 6+ 之间选择 > 395 或类似的中间值——除了浮点问题之外,如果出现新的大小,它会让你的代码最有可能做一些明智的事情。但是,你知道,迂腐攻击。我仍然会为这个答案投赞成票。 对不起,我没有弄清楚如何处理它。我正在使用 XIB,所有控件现在都放在内部视图上。它不会工作。而且我仍然无法为没有旋转的不同 iphone 设备指定空间的确切值。 它是如何回答这个问题的?请注意,UIScreen 在 iOS8 上是面向界面的,这意味着在 iPhone 6 横向上宽度不再是 375。 编辑:哦,我看到你的例子中的橙色视图......这有点棘手!【参考方案2】:

为什么需要选择 30、35 和 45px ?这种像素化的位置是否有原因?


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

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

iPhone5 - iPhone 6 - iPhone 6+ - iPad - iPhone4 横向

注意我的 center X 对齐约束是如何配置的:


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

【讨论】:

我有设计师准备的布局。实际上,我提供了 6 个以上的确切尺寸,但不能让它们看起来适合 6 和 5s。第一种方法是重新计算 5 秒并按设备进行内部缩放,如果我不使用 6/6+ 的初始屏幕,则适用。我很讨厌这个结果,有点不对劲。现在我想要相同但向后 - 放置 6+ 尺寸并按比例缩放它们 6/5 秒,但只会弄得一团糟。我在视图 cnstraints 中使用了内部比例,但仍然无法控制元素的首选大小和位置。就是这样。 Hm.. 在加载视图时,您始终可以释放约束并设置它们的常量,例如 the edit of CeceXX。应该更适合您的需求。

以上是关于如何为 iPhone 6+、6 和 5 指定不同的尺寸?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 iphone 3.5 和 iphone 4 英寸屏幕(ios 6 和 ios7)设计 Single xib?

如何为 iphone6/6+ 优化混合应用程序

如何为 iPhone 6 和 6 Plus 上的应用启用原生分辨率?

如何为所有 iPhone 设备支持一个 xib,直到 iPhone 6 Plus?

如何为 iPhone 6 / 6 Plus 仅横向应用程序创建启动图像?

如何处理 iPhone 4s、5 和 6 的屏幕尺寸,并使所有内容在所有设备上看起来都一样