将视图添加到滚动视图,该视图将展开以填充可用的宽度

我在故事板中使用自动布局,没有代码,并且在滚动视图的内容视图内难以获取视图以扩展以填充设备宽度。 我知道这个问题是一个模糊的滚动视图宽度,但我不知道如何使它不含糊不清,当我想要它总是伸展填充可用的宽度(有一些填充)。

在一个视图控制器中,我添加了4个约束的滚动视图:top,bottom,leading,trailing to superview。 我添加了一个视图作为内容视图的滚动视图 – 所有子视图将被添加到内容视图。 它有4个约束:顶部,底部,领先,尾随滚动视图。 然后,我添加了我想要看到的视图(一个简单的红色框,有一个固定的高度,但延伸到填充屏幕宽度)的内容视图。 其限制是:超级视图(15),超级视图(15),超级视图(15),超级视图(15)和高度等于60。

这会导致滚动视图宽度不明确,而且框架放置错误 – 它想要将框视图的宽度设置为0。

我怎样才能设置这个框视图延伸填充设备屏幕,解决滚动视图内容大小宽度模糊?

你在你的问题中描述的约束等同于下面的VFL:

  • 滚动视图占据整个视图

    H:|[scrollView]| V:|[scrollView]| 
  • 红色视图的高度为60英尺,并且在滚动视图的contentSize的边缘有15的边距:

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

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

你可以通过添加一个约束条件来解决这个不明确的问题,该约束条件是红色视图比主视图窄30pt。 因此,在红色视图的滚动视图的超级视图中,通过从红色视图控制 -拖动到滚动视图(这可能是最容易从文档大纲中完成的)来添加约束:

控制拖动

然后select“等宽”:

等宽

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

减30

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

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