【问题标题】:Auto-Layout Constraint: How to make a view maintains its width/height ratio when resized?自动布局约束:如何使视图在调整大小时保持其宽度/高度比?
【发布时间】:2012-12-20 17:22:42
【问题描述】:

在界面构建器中,我们可以固定高度,固定宽度,使两个视图的宽度相等,但是我如何设置约束,以便在调整视图大小时,它保持其宽度/高度比?

在我的特殊情况下,我的视图控制器中有一个 UIImageView。当视图调整大小时,我希望我的图像视图调整大小,但保持 3:2 的宽度:高度比。是否可以在 IB 中完成?用代码可以做到吗?

谢谢!

【问题讨论】:

    标签: ios xcode autolayout


    【解决方案1】:

    这份来自 Apple 的指南对我很有帮助 - 它概述了两种方法,一种是为某些子视图关闭 AutoLayout 并直接设置框架,另一种是通过代码使用纯 AutoLayout。

    https://developer.apple.com/library/ios/technotes/tn2154/_index.html

    【讨论】:

      【解决方案2】:

      我不认为你可以在 IB 中做到这一点,但在代码中,可以这样做(iv 是我对图像视图的出口):

          [self.iv removeConstraints:self.iv.constraints];
          NSLayoutConstraint *con1 = [NSLayoutConstraint constraintWithItem:self.iv attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1  constant:100];
          NSLayoutConstraint *con2 = [NSLayoutConstraint constraintWithItem:self.iv attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.iv attribute:NSLayoutAttributeWidth multiplier:.66 constant:0];
          [self.iv addConstraints:@[con1,con2]];
      

      这明确地将高度设置为 100,并将宽高比设置为 3:2。

      【讨论】:

      • 谢谢! con2 正是我所需要的。
      • +1 我也没有找到 IB 方法来做到这一点。我也是通过代码来实现的。
      • 更新:Xcode 5.1 支持在 IB 中执行此操作(最终)。
      • 我认为@rudi 帖子现在应该被标记为接受的答案,因为新版本的 xcode 可以支持这种行为。而且现在几乎所有的开发者都使用 xcode 版本 5 或更高版本。 :)
      【解决方案3】:

      您可以通过控制从视图拖动到自身并选择纵横比来在 IB 中添加纵横比约束。

      【讨论】:

      • 这绝对是正确的答案。但是,如果您不喜欢控件拖动方式,请单击界面构建器右下角的第二个图标(中间有正方形的那个),并确保选中“纵横比”标志。跨度>
      猜你喜欢
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 2013-06-23
      • 2012-11-06
      • 2014-10-21
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      相关资源
      最近更新 更多