我看过这篇文章: scrollView not scrolling swift,发现被采纳的答案建议在
我正在遵循这个教程的一般结构,它固定了
这是此视图的完整
UIScrollViews
子视图contentView
上添加底部约束。我有以下视图层次结构和每个视图上的约束:
UIView -> UIScrollView(scrollView) -> UIView(contentView)
//in the View Controller
self.view.addSubview(coverImage)
scrollView.addSubview(contentView)
view.addSubview(scrollView)
这里是我添加到 scrollView
和 contentView
的 NSLayoutConstraint
。
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)])
我正在遵循这个教程的一般结构,它固定了
scrollView
的宽度并具有灵活的高度。
当我添加的内容超过实际父视图大小时,我无法向下滚动以查看其余部分。
似乎他们如何使高度动态而宽度固定是通过将UIScrollView
的子视图约束为与UIScrollView
的父视图具有相等的宽度。我成功地做到了这一点,但滚动仍然没有发生。谢谢您的帮助!这是此视图的完整
ViewController
:
https://gist.github.com/ebbnormal/90c35c435320e0ec1307e95f575119bf
更新
我采用了Daniel的建议,将contentView
底部的锚定点从scrollView
底部移除。
所以在调试视图层次结构后,我发现contentView
被设置为小于其父视图高度,这似乎源自一个自动布局约束,将contentView
的self.bottom
设置为UILabel
的label.bottom
,而该UILabel
是contentView
的子视图。我从未设置过这个约束,也不知道如何去除它。
以下是在ViewHierarchy中的样子,其中突出显示的View
是被裁剪的contentView
。
contentView
的底部约束,这样它就不再与scrollView
的父视图相连了吗? - Thalattaself.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[scrollView]-0-|
开头的那一行代码。我猜你有一些理由通过编程方式添加约束,而不是使用 Interface Builder 进行布局。在我看来,使用 IB 进行布局会更加容易。我现在得走了,但希望你能解决这个问题。 - Daniel Zhang