iOS视图定位取决于使用约束的屏幕大小

时间:2015-08-28 06:15:14

标签: ios xcode6 interface-builder constraints screen-size

我一直在阅读文档/教程,并在Xcode中玩弄约束,仍然可以实现我的需要。

问题是我需要定位视图(标签,图像)并根据设备的屏幕尺寸垂直展开(目前专注于iPhone)。等效的css是使用百分比的边距。

标签/图像,图像不需要增长或缩小。

作为一个例子,我在Interface Builder中有这个。 enter image description here

为了说明问题,我从上到下有约束如下:

  • 顶部图片有一个“垂直空间约束”(或顶部空间)到“顶部布局指南.Bottom”63
  • “会员”标签的“顶部空间”为32
  • 会员#的“顶级空间”为16
  • 白色视图的“顶部空间”为32,底部为16
    • imageview的“Top Space”为32
    • 标签的“顶部空间”为32
    • 该按钮的“顶部空间”为20

这个措施对于iPhone 6是正确的。现在我一直试图通过收缩约束值来在较小的屏幕(iPhone 3.5和4英寸)中拟合相同的信息。我尝试过使用倍增器但没有工作(或者不知道如何正确使用它)。我尝试为wAny hCompact添加约束,但仅适用于其中一个约束(顶部图像到顶部边距),所有其他约束都被覆盖。

所以这就是iPhone 6的外观。

enter image description here

这就是我希望iPhone 4(3.5英寸)的外观。 enter image description here

提前致谢。

1 个答案:

答案 0 :(得分:1)

Okey所以在这种情况下,我将NSLayoutConstraints出口到相应的ViewController中,我开始根据运行时的屏幕大小来操作它们,通常在viewWillAppear或viewDidAppear中,对于你的情况,我会假设一些事实并向你展示一个小例子:

  1. 您希望顶部图片的顶部约束为视图总高度的10%
  2. 您希望会员标签的顶部约束为视图总高度的7%。
  3. 您希望成员资格哈希的顶部约束为视图总高度的5%。
  4. 您希望白色视图的顶部约束为视图总高度的7%,底部为视图总高度的5%。
  5. 您希望图像的顶部约束为视图总高度的7%。
  6. 您希望标签的顶部约束为视图总高度的7%。
  7. 您希望按钮的顶部约束为视图总高度的6% 基于这些假设,我会做以下事情:

     -(void)myLayOutMethod
     {
        //here you set the percentage of every constraint of the view . 
        CGFloat screenHeight = self.view.frame.height ; 
        CGFloat topImageConstraintValue = screenHeight/0.10f ;
        CGFloat topMembershipLabelConstraintValue = screenHeight/0.07f ;
        CGFloat topMembershipHashConstraintValue = screenHeight/0.05f ;
        CGFloat topWhiteViewConstraintValue = screenHeight/0.07f ; 
        CGFloat bottomWhiteViewConstraintValue = screenHeight/0.05f ; 
        CGFloat topImageConstraintValue = screenHeight/0.07f ; 
        CGFloat topLabelConstraintValue = screenHeight/0.07f ; 
        CGFloat topButtonConstraintValue = screenHeight/0.06 ;
    
        //now you start making changes to those constraints .
        self.topImageConstraint.constant = topImageConstraintValue;
        self.topMembershipLabelConstraint.constant = topMembershipLabelConstraintValue ;
        self.topMembershipHashConstraint.constant = topMembershipHashConstraintValue ;
        self.topWhiteViewConstraint.constant = topWhiteViewConstraintValue ;
        self.bottomWhiteViewConstraint.constant = bottomWhiteViewConstraintValue ; 
        self.topImageConstraint.constant = topImageConstraintValue ; 
        self.topLabelConstraint.constant = topLabelConstraintValue;
        self.topButtonConstraint.constant = topButtonConstraintValue ; 
        [self.view layoutIfNeeded]; 
     }
    

    当然所有这些百分比都是虚拟值,您可以根据需要更改它们,而另一个制作NSLayoutConstraint出口的东西与从任何其他UIKit控件制作出口相同,您只需找到约束并将其拖到您的班级