如何为 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
的顶部、底部、前导和尾部约束。之后,将您的对象(它们可以是UIImageViews
、UILabels
等等)放在您刚刚放置的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?
如何为 iPhone 6 和 6 Plus 上的应用启用原生分辨率?
如何为所有 iPhone 设备支持一个 xib,直到 iPhone 6 Plus?