使用自动布局来支持不同 iPhone 尺寸的问题(包括图表)

Posted

技术标签:

【中文标题】使用自动布局来支持不同 iPhone 尺寸的问题(包括图表)【英文标题】:Issue using auto-layout to support different iPhone sizes (diagrams included) 【发布时间】:2015-08-10 20:03:04 【问题描述】:

蓝色的所有内容都是 ImageView 的一部分(在 Sketch 中设计 ==> 导出为 PNG ==> 导入到 ImageView 中)。因此,它可以很好地扩展而没有任何限制。检查图形变大,我的复选标记指示用户名和密码的位置。但是,我的 TextFields(电子邮件和 PIN)不会按比例放大,也不会移动到复选标记指示的位置。我本质上希望它们保持在屏幕的相同相对部分(例如,距左侧 40%,距右侧 10%...),因为我认为这可以解决我的问题。我使用了各种约束(超级视图、领先等)并尝试了一个容器,但没有任何效果。我当然可以用不同的大小再次导出我的 Sketch 文件,但我认为我的背景图像没有任何问题。但是,我不能将我的背景图像分割成更小的东西,因为有一个我不想弄乱的背景。此外,复选标记实际上是围绕用户名和密码的框。假设除了将 imageView 绑定到边距的限制之外,我没有其他限制。

谢谢!

--kmuzumdar

【问题讨论】:

感谢您编辑它以嵌入图表。距离自己只有 7 声望! 您是否尝试过在复选标记和文本字段之间进行水平约束? 问题是复选标记只是背景图像的一部分。在我的实际设计中,它们实际上是封装文本字段的框。我没有办法引用盒子的位置,也无法分割图像,因为有背景透明度等。 蓝色大圆圈复选标记也是背景的一部分吗? 在不知道设计细节的情况下,我会说也许有一种方法可以使用多个图像。 【参考方案1】:

如果您打破了 iPhone 6 外壳的一些限制,或者您将左 40% 设置为 相等,请记住,仅缩放是不够的,屏幕比例是设备之间也不同。

试试这个..

电子邮件输入Pin #设置为垂直居中,并带有相应的复选标记

在复选标记及其标签之间设置大于或等于约束。让他们远离彼此。

1234563 p>

应该这样做:

 let height = UIScreen.mainScreen().bounds.height
 if height == 667  // iphone 6 screen's height
    //Adjust your constrains
 
另外,您也可以手动增加 字体大小 6 或 6+。

更新:

阅读了一些 cmets,我注意到一些重要的事情,那就是你不能实例化复选标记来为它们添加约束,在这种情况下,你可以通过设备特定的约束来解决所有问题。

第 3 点和第 4 点中描述的那个。 继续手动设置所有内容,根据每个设备屏幕的设计相应地更改约束.constant 属性。 Here's a link to these sizes

恐怕你的情况没有更好的办法了。

我想到了一些其他的东西,一些非常强大的东西,那就是每个约束的 multiplier 属性。我记得使用它们来构建井字游戏板,通过这种技术设置线条的精确位置。因此,这可能是您的解决方案。 Here's a link 如何通过代码使用它们。往下走,直到看到副标题 Standard Programmatic Layout 你会发现这样的东西:

self.constraintToAnimate = [NSLayoutConstraint constraintWithItem:label
         attribute:NSLayoutAttributeTop
         relatedBy:NSLayoutRelationEqual
            toItem:self.view
         attribute:NSLayoutAttributeBottom
        multiplier:0.25
          constant:0.0];
[self.view addConstraint:constraint];

还有,下面的解释。

前两个参数确定约束的目标, 标签,以及要设置的属性:top。第三个参数, relatedBy,接受 NSLayoutRelationEqual 之一, NSLayoutRelationGreaterThanOrEqual,或 NSLayoutRelationLessThanOrEqual。接下来的两个参数允许我们 设置我们将从中派生值的源视图和属性。 这里我们说我们要使用我们的底点 superview,在 4 英寸设备上为 568 点。最后我们有 得到了一个乘数,我们将用它来得出我们的价值 — 0.25 (25%)。 我们没有使用常量参数,所以我们将其设置为 0.0。放 变成一个数学方程,它看起来像这样: label.top = superview.bottom*0.25.

因此,这可以是另一种方式,而不依赖于代码,因为这可以通过 Storyboard 来实现。

【讨论】:

以上是关于使用自动布局来支持不同 iPhone 尺寸的问题(包括图表)的主要内容,如果未能解决你的问题,请参考以下文章

在 iPhone 上为不同的图像尺寸使用 Xcode 自动布局

如何在不使用自动收缩的情况下使用不同 iPhone 尺寸的自动布局更改字体大小 [重复]

如何在情节提要中使用自动布局在不同设备尺寸上设置动态位置的约束

在不使用自动布局的情况下调整 iPhone 5 屏幕尺寸

没有自动布局的不同屏幕尺寸的相同故事板

如何为不同的屏幕尺寸创建具有自动布局的比例视图?