iOS 视图定位取决于使用约束的屏幕尺寸

iOS view positioning depending on screen size using constraints

我一直在阅读 documentation/tutorials 并尝试使用 Xcode 中的约束,仍然可以实现我需要的东西。

问题是我需要定位视图(标签、图像)并根据设备的屏幕尺寸垂直展开它们(现在关注 iPhone)。 css 等效项是使用带百分比的边距。

labels/images,图像不需要放大或缩小。

例如,我的界面生成器中有这个。

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

这个措施对于 iPhone6 是正确的。现在我一直在努力实现的是通过收缩约束值。我试过使用乘数但没有用(或者不知道如何正确使用它)。我尝试向 wAny hCompact 添加约束,但只适用于其中一个约束(顶部图像到顶部边距),所有其他约束都被覆盖了。

这就是它在 iPhone 6.

中的样子

这就是我希望它在 iPhone 4(3.5 英寸)中的样子。

提前致谢。

好的,所以在这种情况下,我会在相应的 ViewController 中输出 NSLayoutConstraints,然后我会在运行时根据屏幕大小开始操作它们,通常是在 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 控件创建出口相同,您只需找到约束并将其拖动到你的 class