UIScrollView子视图未扩展到填充宽度(Autolayout)

时间:2017-09-27 00:15:15

标签: ios cocoa-touch autolayout

我正在使用以下代码将视图约束到父UIScrollView的左右锚点。

尽管右侧锚点和左侧锚点设置为ScrollView的左右锚点,但视图不会展开以填充滚动视图。

注意:此图像中的灰色背景是UIScrollView的背景,因此我知道它已正确约束到其父视图。

代码:

self.wtfView.translatesAutoresizingMaskIntoConstraints = false
self.wtfView.backgroundColor = UIColor.orange
self.wtfView.topAnchor.constraint(equalTo: self.passwordField.bottomAnchor, constant: 40.0).isActive = true
self.wtfView.leftAnchor.constraint(equalTo: self.containerView.leftAnchor, constant: 40.0).isActive = true
self.wtfView.rightAnchor.constraint(equalTo: self.containerView.rightAnchor, constant: 40.0).isActive = true
self.wtfView.heightAnchor.constraint(equalToConstant: 50.0).isActive = true
self.wtfView.bottomAnchor.constraint(equalTo: self.containerView.bottomAnchor, constant: 40.0).isActive = true

https://imgur.com/a/U88iW

编辑: 下面的代码工作正常,但我更喜欢使用左+右锚技术来指定宽度,而不是宽度约束。应该不可能吗?

self.wtfView.translatesAutoresizingMaskIntoConstraints = false
self.wtfView.backgroundColor = UIColor.orange
self.wtfView.topAnchor.constraint(equalTo: self.passwordField.bottomAnchor, constant: 40.0).isActive = true
self.wtfView.leftAnchor.constraint(equalTo: self.containerView.leftAnchor, constant: 40.0).isActive = true
self.wtfView.widthAnchor.constraint(equalTo: self.containerView.widthAnchor, constant: -80.0).isActive = true //THE DIFFERENT ONE
self.wtfView.heightAnchor.constraint(equalToConstant: 50.0).isActive = true
self.wtfView.bottomAnchor.constraint(equalTo: self.containerView.bottomAnchor, constant: 040.0).isActive = true

2 个答案:

答案 0 :(得分:3)

原因是UIScrollView的contentView仍然不知道你希望它占用它的parentView的宽度。

您可以通过在iOS11中添加以下约束来解决此问题:

self.wtfView.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: 40.0).isActive = true
self.wtfView.rightAnchor.constraint(equalTo: self.view.rightAnchor, constant: 40.0).isActive = true

这说"嘿,我希望你将内容宽度锁定到超级视图的宽度。

在iOS 11之前,您可以简单地将子视图约束到父视图的左右锚点和内容视图的左右锚点。

像这样:

import MaskedInput from 'node-modules/vue-masked-input/dist/MaskedInput.js'
Vue.use(MaskedInput);

很像,Aleksei建议您现在将宽度限制为刚性值(父视图的宽度),并且scrollview将使用它来决定scrollview的宽度。

答案 1 :(得分:1)

可能会尝试提供:

self.wtfView.widthAnchor.constraint(equalTo: self.containerView.widthAnchor, constant: -40.0).isActive = true