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

Ios 使用自动布局支持不同尺寸iPhone的问题(包括图表),ios,iphone,swift,view,autolayout,Ios,Iphone,Swift,View,Autolayout,蓝色的所有内容都是ImageView的一部分(在Sketch==>导出为PNG==>导入到ImageView中时设计)。因此,它可以在没有任何约束的情况下很好地扩展。检查图形变大了,我的复选标记也变大了,指示用户名和密码应该放在哪里。但是,我的文本字段(电子邮件和PIN)不会放大,也不会移动到复选标记指示的位置。我基本上希望它们保持在屏幕的相同相对部分(例如,左侧40%,右侧10%),因为我认为这将解决我的问题。我使用了各种约束(超级视图、前导等)并尝试了一个容器,但都不起作用。我当然可以再次导

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

谢谢


--kmuzumdar

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

试试这个

  • 电子邮件输入Pin#设置为与其对应的复选标记垂直居中

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

  • 您可能需要手动进行一些调整,为此,您也可以始终有
    NSLayoutConstraint
    的出口,只需检查您是否在iphone 6上,并更改约束的
    .constant
    属性即可

这应该做到:

  • 此外,您也可以停止手动增加6或6+的字体大小
更新:

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

第3点和第4点描述了一个。 只需继续手动设置所有内容,根据每个设备屏幕的设计相应地更改约束
.constant
属性

恐怕没有比这更好的办法了

我脑海中浮现出另一种东西,一种真正强大的东西,那就是每个约束的乘数属性。我记得用它们制作了一个tic-tac趾板,通过这种技术将线条设置在准确的位置。因此,这可能是您的解决方案。如何通过代码使用它们。只需向下走,直到看到副标题标准编程布局 你会发现这样的东西:

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。第三个参数, 关系人,接受NSLayoutRelationEqual之一, NSLAYOUT相关性大于或等于,或 NSLAYOUTRELATIONLESSTHANREQUAL。接下来的两个参数允许我们 设置源视图和属性,我们将从中派生值。 在这里,我们要说的是,我们希望使用我们的 superview,即4英寸设备上的568点。最后,我们 得到了一个乘数,我们将使用它来推导我们的值 — 0.25 (25%). 我们没有使用常量参数,所以我们将其设置为0.0。放 在一个数学方程中,它看起来是这样的: label.top=superview.bottom*0.25


因此,这可以是另一种方式,不依赖代码,因为这可以通过故事板实现。

感谢您编辑它以嵌入图表。离自己只有7个名声了!你试过复选标记和文本字段之间的水平约束吗?问题是复选标记只是背景图像的一部分。在我的实际设计中,它们实际上是封装文本字段的框。我没有办法参考盒子的位置,也无法分割图像,因为有背景透明度等。蓝色大圆圈复选标记也是背景的一部分吗?在不知道设计细节的情况下,我会说也许有一种方法可以使用多个图像来完成。
self.constraintToAnimate = [NSLayoutConstraint constraintWithItem:label
         attribute:NSLayoutAttributeTop
         relatedBy:NSLayoutRelationEqual
            toItem:self.view
         attribute:NSLayoutAttributeBottom
        multiplier:0.25
          constant:0.0];
[self.view addConstraint:constraint];