【问题标题】:Different constraints for 3.5 inch and 4 inch3.5 英寸和 4 英寸的不同约束
【发布时间】:2014-05-10 01:18:10
【问题描述】:

我的标签与我的 4 英寸屏幕底部的距离为 50px

现在我想使用约束使这个标签位于 3.5 英寸 屏幕底部的30px。这可以使用自动布局和约束吗?

当我将 bottom-constraint 设置为 30px 时,标签也位于 4 英寸屏幕 的底部 30px。基本上我想减少我的对象之间的空间,以便所有东西都适合 3.5 英寸 屏幕。

【问题讨论】:

  • 你的标签有固定高度吗?
  • 我已经问过类似的问题了:stackoverflow.com/questions/21600539/…
  • 您能发表一下您是如何实现这一目标的吗?在视图加载期间手动添加/修改 3.5 和 4" 英寸的约束?

标签: ios xcode constraints autolayout


【解决方案1】:

如果你想要条件约束,你需要手动添加约束(至少底部约束,但我不建议同时使用代码和 IB 进行约束)。

为设备添加一个测试并在此基础上设置底部值:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480) {
        distanceToBottom = 30; // pre-iPhone 5
    }

    if(result.height == 568) {
        distanceToBottom = 50; // iPhone 5
    }
}

【讨论】:

    【解决方案2】:

    如果你真的希望它与屏幕大小成正比,你可以让约束成正比:

    // this constraint positions the label at the bottom of its superview
    NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint constraintWithItem:label 
                                                                        attribute:NSLayoutAttributeBottom
                                                                        relatedBy:NSLayoutRelationEqual
                                                                           toItem:label.superview
                                                                        attribute:NSLayoutAttributeBottom
                                                                       multiplier:1
                                                                         constant:0];
    
    // move it up by 6% of the superview's height
    bottomConstraint.constant = -(label.superview.bounds.size.height * .06);
    

    有几点需要注意:

    1) 当视图被布局时,你必须设置这个约束的常量,所以label.superview 有一个高度。 updateConstraints 是个不错的地方。

    2) 该常量是一个固定值,因此如果layout.superview 的边界发生变化(例如旋转),它不会自动更新。在这种情况下,您需要确保百分比计算再次发生。执行此操作的最佳位置取决于您的视图的布局方式以及导致其调整大小的原因。

    或者,您可以将常量基于窗口高度,正如@Handsomeguy 建议的那样:

    bottomConstraint.constant = -([UIScreen mainScreen].bounds.size.height * .06);
    

    【讨论】:

      【解决方案3】:

      相当简单的方法是在情节提要中使用“比例”。 指定约束,例如,宽度、高度和水平对齐。 对于垂直对齐,这将是您的情况,您使用比例。 这个想法是这样的:“无论屏幕的高度如何,将标签的底部固定到具有特定值的超级视图的底部”,您不需要计算该值。

      Proportion set in storyboard

      使用这些值,我指定标签的底部始终是超级视图底部的 95%(顺便说一句,“底部”是“帧内最大 Y 值”的另一种说法,与“y”+“高度”相同')。

      不同设备的标签“底部”记录值为:

      "3.5" = 457   (427 + 30)
      "4"   = 540.5 (510.5 + 30)
      "4.7" = 634.5 (604.5 + 30)
      "5.5" = 700.3 (670.3 + 30)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多