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

时间:2015-08-10 20:03:05

标签: ios iphone swift view autolayout

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

谢谢!

- kmuzumdar

1 个答案:

答案 0 :(得分:1)

看起来好像你打破了iPhone 6外壳上的一些限制,或者你已经将<40>设置为等于,请记住只是缩放是不够的,屏幕比例是设备之间也有所不同。

试试这个..

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

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

  • 您可能需要手动进行一些调整,为此您总是可以设置NSLayoutConstraint个出口,只需检查您是否在iphone 6上并更改.constant属性约束

  

这应该这样做:

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

<强>更新

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

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

我担心你的情况会有更好的方法。

其他一些东西,进入我的脑海,一些非常强大的东西,那就是每个约束的乘数属性。我记得用它们来构建一个tic tac toe board,通过这种技术设置线条的确切位置。所以,这可能是你的解决方案。 Here's a link如何通过代码使用它们。只需查看字幕标准程序布局即可 你会发现这样的东西:

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

并且,以下解释。

  

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

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