IB,保持ImageView中心,但增长为屏幕尺寸,保持纵横比

时间:2017-10-22 13:06:19

标签: ios xcode interface-builder

由于我可以在Android和WPF中轻松做同样的事情,我认为XCode的界面生成器也很容易。但是我错了。我在故事板上花了好几个小时多次重置约束。我知道这个问题似乎很愚蠢,但请给我一个提示。

我在故事板上想要这样的东西。我应该设置什么约束?

  1. 应保留ImageView的宽高比。
  2. ImageView水平居中。
  3. ImageView增长为屏幕宽度,例如垂直手机上屏幕宽度的90%。或者,我希望我可以设置一个最大值,例如,不大于400.我的意思是,iPad上的90%太大了。
  4. ImageView的上边距应该与屏幕尺寸合理。我的意思是,硬编码的边距20会使它太靠近iPad的顶部,而硬编码的边距200在iPad上看起来不错,但在iPhone SE上则不行。
  5. enter image description here

2 个答案:

答案 0 :(得分:1)

  1. 约束宽度和高度以保持纵横比(一个约束:

    imageView.widthAnchor.constraint(equalTo:imageView.heightAnchor,multiplier:0.6).isActive = true

  2. 将centerX约束到viewController的视图中心X:

    imageView.centerXAnchor.constraint(equalTo:self.view.centerXAnchor,constant:0).isActive = true

  3. 使用某种比例(此处为90%)将imageView宽度(或高度)约束为viewController视图的宽度:

    imageView.widthAnchor.constraint(equalTo:self.view.widthAnchor,multiplier:0.9).isActive = true

  4. 这是唯一的问题,什么是合理的抵消?要求太模糊了。但如果您唯一的问题是根据给定的UI设置适当的偏移量,我会使用大小类来根据给定的大小类提供不同的约束 - 请参阅documentation

答案 1 :(得分:1)

如果您想在故事板中实现此目的,请执行以下操作:

  1. 将您的imageView设置为所需的大小和位置
  2. 将纵横比约束添加到您的imageView
  3. 将中心水平约束添加到您的imageView
  4. 向imageView添加宽度约束等于其superview的宽度;然后将乘数更改为(desired width) / (width of the superview)。将优先级更改为999
  5. 向imageView添加宽度约束,并将关系设置为小于或等于。把你的最大值放在这里(400)
  6. 对于顶部偏移,在superView中添加具有清晰背景的UIView。将其顶部,左侧和右侧设置为等于超级视图的左上角和右上角,并将垂直间距0添加到imageView。然后添加一个等于其超视图高度的高度约束,并将乘数更改为(desired space) / (height of the superview)。 (附件中的粉红色视图)
  7. enter image description here