我在界面生成器中创建了一个已经添加UIScrollView
了一堆对象UITextView
的对象。UIImageView
我将它连接到IBOutlet
,并在-(void)viewDidLoad
我将其内容大小设置为1200x2000
. 启用用户交互、多点触控、启用滚动并显示垂直和水平滚动指示器都设置为YES
。当我在 iOS 模拟器中启动应用程序时,它不会滚动。这种行为的原因可能是什么?
6 回答
viewDidLoad 很快。您必须等到视图布局完成后。尝试在 viewDidAppear 中设置 contentSize。
你在使用自动布局吗?如果是这样,请查看以下答案(并忘记 1.): UIScrollView doesn't use autolayout constraints。
The best way I know how to overcome this problem without resorting to writing code is that it all can be done within a storyboard and here is how:
- Leave autolayout enabled.
- Make a generic UIView a subview of the UIScrollView. 2.1)Put all your View components inside this generic UIView.
- Make a autolayout constraint between a subview and the UIScrollView. You must pin the right and/or bottom of the last subview to the right and/or bottom of the UIScrollView. This is how the UIScrollView knows the content size.
viewDidLoad
确实为时过早,但viewDidAppear:animated
也可能还不够晚。设置的理想场所contentOffset
是里面viewDidLayoutSubviews
。
如果您使用的是自动布局,请确保将代码设置为在其中设置内容大小
viewDidLayoutSubviews
我在 UIScrollView 上使用了自定义视图,用于拉动刷新功能,并且滚动视图不可滚动。我尝试contentSize
用设置AutoLayout
,也尝试通过代码设置。滚动视图仍然无法滚动。
花了 3 ~ 4 小时后,我通过contentInset
. 它会告诉滚动视图为滚动添加一些额外的空间。
override func viewDidLayoutSubviews() {
// Add extra 15pt on the `top` of scrollView.
//self.scrollView.contentInset = UIEdgeInsetsMake(15, 0, 0, 0)
// Add extra 2pt on the `bottom` of scrollView, let it be scrollable. And the UI is more beautiful in my case.
self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 2, 0)
}
参考文档:
这是一个很好的滚动视图演练,以防有人在一段时间不使用它们后忘记了:https ://medium.com/@pradeep_chauhan/how-to-configure-a-uiscrollview-with-auto-layout-在-interface-builder-218dcb4022d7中。
基本上,确保您有视图 -> 滚动视图 -> 视图,如下所示:
然后,
1. 将滚动视图约束(顶部、底部、前导和尾随)设置为 (0,0,0,0)。
2. 将内部视图约束(顶部、底部、前导和尾随)设置为 (0,0,0,0)。
3.设置内视图与父视图等宽等高。
4. 选择内视图的高度约束并将优先级设置为低(250)。