将视图添加到滚动视图,该视图将拉伸以填充可用宽度

时间:2015-02-01 22:36:35

标签: ios uiview uiscrollview autolayout

我在故事板中使用自动布局,没有代码,并且难以在滚动视图的内容视图中获取视图以拉伸以填充设备宽度。我理解这个问题是一个模糊的滚动视图宽度,但是当我希望它总是拉伸以填充可用宽度(带有一些填充)时,我不确定如何使它变得不明确。

在视图控制器中,我添加了一个包含4个约束的滚动视图:top,bottom,leading,trailing to superview。我在滚动视图中添加了一个视图作为内容视图 - 所有子视图都将添加到内容视图中。它有4个约束:顶部,底部,前导,尾随滚动视图。然后我添加了我想要显示的视图(一个具有固定高度但是拉伸以填充屏幕宽度的简单红色框)到内容视图。它的约束是:跟踪到superview(15),导致superview(15),top到superview(15),bottom到superview(15),高度等于60。

这导致模糊的滚动视图宽度,并且框架放错位置 - 它想要将框视图的宽度设置为0.

如何进行设置以使框视图拉伸以填充设备屏幕,解决滚动视图内容大小宽度模糊?

1 个答案:

答案 0 :(得分:5)

您在问题中描述的约束等同于以下VFL:

  • 滚动视图占据整个视图

    H:|[scrollView]|
    V:|[scrollView]|
    
  • 红色视图高60磅,与滚动视图的contentSize边缘的边距为15:

    H:|-(15)-[redView]-(15)-|
    V:|-(15)-[redView(60)]-(15)-|
    

红色视图不明确,因为没有任何内容可以定义它的宽度。 (红色视图和滚动视图之间的水平约束定义了滚动视图的contentSize,而不是红色视图的宽度。请参阅Apple Technical Note 2154

通过添加一个约束来解决这种歧义,该约束表明红色视图比主视图窄30pt。因此,在红色视图和滚动视图的超级视图之间添加约束 control - 从红色视图拖动到滚动视图(这可能是文档大纲中最容易做到的):

control drag

然后选择“等宽”:

equal widths

将红色视图定义为与主视图相同的宽度后,您现在必须更改该约束以修改常量,以调整您在红色视图和滚动视图contentSize之间提供的边距。因此,选择刚添加的约束并对其进行编辑,将常量更改为-30:

minus 30

坦率地说,Interface Builder技术有点麻烦。可能更容易说明如何以编程方式执行此操作:

view.addConstraint(NSLayoutConstraint(item: redView, attribute: .Width, relatedBy: .Equal, toItem: view, attribute: .Width, multiplier: 1.0, constant: -30))