Swift:UIScrollView不能垂直滚动

时间:2016-08-10 18:01:53

标签: ios swift uiscrollview nslayoutconstraint

我看过这篇文章:scrollView not scrolling swift

我看到接受的答案建议此人向UIScrollViews子视图contentView添加底部约束。我对每个视图都有以下视图层次结构和约束:

UIView - > UIScrollView(scrollView) - >的UIView(内容查看)

//in the View Controller
self.view.addSubview(coverImage)
scrollView.addSubview(contentView)
view.addSubview(scrollView)

以下是我添加到NSLayoutConstraintscrollView的{​​{1}}

contentView

我遵循本教程的一般结构,它修复了宽度并具有let tmpViewsDictionary = ["scrollView":self.scrollView, "contentView": self.contentView] self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[scrollView]-0-|",options: [], metrics: nil,views: tmpViewsDictionary)) self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[scrollView]-0-|",options: [], metrics: nil, views: tmpViewsDictionary)) self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[contentView]-0-|", options: [], metrics: nil, views: tmpViewsDictionary)) self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[contentView]-0-|", options: [], metrics: nil, views: tmpViewsDictionary)) self.view.addConstraints([NSLayoutConstraint(item :self.contentView, attribute: .Width, relatedBy: .Equal, toItem: self.view, attribute: .Width , multiplier: 1, constant: 0)]) 的灵活高度。

http://nscookbook.com/2015/06/ios-programming-recipe-36-a-fixed-width-dynamic-height-scrollview-in-autolayout/

当我添加超出实际父视图大小的内容时,我无法向下滚动以查看其余内容。 似乎它们如何使高度动态并且宽度固定是简单地将scrollView的子视图限制为具有与UIScrollView的父级相等的宽度。我成功了,但滚动仍然没有发生。谢谢您的帮助!

以下是此视图的完整UIScrollView

https://gist.github.com/ebbnormal/90c35c435320e0ec1307e95f575119bf

更新

我使用Daniels的建议,即将ViewController的底部移到contentView底部。

因此,在调试视图层次结构后,我发现scrollView被设置为小于其父视图高度,这似乎源于自动布局约束设置contentView {{1} } self.bottom contentView label.bottom的{​​{1}}。我从来没有设置这个约束,我不知道如何摆脱它。

以下是ViewHierarchy中的内容,其中突出显示的UILabel是您看到的contentView被截断。

enter image description here

2 个答案:

答案 0 :(得分:2)

添加约束的方式很可能是导致问题的原因。

您似乎将内容视图的边界限制为与滚动视图相同。在这种情况下,由于约束,不会发生滚动。

这是因为您在self.scrollView内加入了self.contentViewtmpViewsDictionary

在您链接的教程中,字典仅用于向滚动视图的内容视图中的视图添加约束。它不包括滚动视图或内容视图。

答案 1 :(得分:1)

EUREKA。我愚蠢地设置contentView的孩子的垂直约束并将其固定在contentView的底部,因此contentView被缩短并且没有滚动。

"V:|-300-[wikiTitle]|"

最后"|"切断了UIScrollView短片的孩子。

最后,我需要将contentView的最后一项固定为距离contentView

底部的特定间距