11

我在界面生成器中创建了一个已经添加UIScrollView了一堆对象UITextView的对象。UIImageView我将它连接到IBOutlet,并在-(void)viewDidLoad我将其内容大小设置为1200x2000. 启用用户交互、多点触控、启用滚动并显示垂直和水平滚动指示器都设置为YES。当我在 iOS 模拟器中启动应用程序时,它不会滚动。这种行为的原因可能是什么?

4

6 回答 6

22
  1. viewDidLoad 很快。您必须等到视图布局完成后。尝试在 viewDidAppear 中设置 contentSize。

  2. 你在使用自动布局吗?如果是这样,请查看以下答案(并忘记 1.): UIScrollView doesn't use autolayout constraints

于 2013-11-04T15:49:56.097 回答
9

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:

  1. Leave autolayout enabled.
  2. Make a generic UIView a subview of the UIScrollView. 2.1)Put all your View components inside this generic UIView.
  3. 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.
于 2013-12-31T21:31:35.737 回答
4

viewDidLoad确实为时过早,但viewDidAppear:animated也可能还不够晚。设置的理想场所contentOffset是里面viewDidLayoutSubviews

于 2014-05-26T02:11:06.520 回答
4

如果您使用的是自动布局,请确保将代码设置为在其中设置内容大小

viewDidLayoutSubviews
于 2015-08-09T07:33:15.240 回答
3

我在 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)
}

参考文档:

于 2016-10-05T09:31:48.067 回答
1

这是一个很好的滚动视图演练,以防有人在一段时间不使用它们后忘记了: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)。
在此处输入图像描述




于 2019-03-12T17:15:52.407 回答