15

我觉得我已经触及了阻止这个的每一个可能的原因,但是我的故事板中有一个 UIScrollView 连接了一个插座,在 viewDidLoad 我设置了 contentSize 以便我可以滚动(是的,比我的帧大小更大)!

但是,无论我更改什么,我都无法滚动!我的滚动视图中有几个文本字段并启用了弹跳功能,因此我可以看到,在测试它的上下移动时,我的子视图在其中,但是无论我将 contentSize 设置为什么,我都无法滚动。

有什么我可能遗漏/应该检查的吗?这是故事板中使用 UIScrollView 的已知问题吗?

更奇怪的是,我可以做这样的事情: [scrollView setBackgroundColor:[UIColor blueColor]];而且我有一个蓝色的滚动视图!但设置内容大小失败。

编辑

我唯一的代码(否则滚动视图只是放入情节提要视图控制器):

-(void)viewDidAppear:(BOOL)animated
{
    [scrollView setContentSize:CGSizeMake(320, 640)];
}

记录的帧,按预期出现:

width: 320.00
height: 504.00

编辑 2

事实证明,在我的故事板中删除滚动视图的任何子视图都可以让它滚动得很好。如果我通过情节提要向它添加任何子视图,即使是一个空白的全新 UIButton,它也不会应用 contentSize/允许滚动。

4

8 回答 8

48

使用 ViewDidLayoutSubview

- (void)viewDidLayoutSubviews
{
    [_scrollView setContentSize:CGSizeMake(320, 500)];
}

UIViewController 的方法调用顺序如下

  • 从笔尖醒来
  • viewDidLoad
  • 视图将出现
  • viewWillLayoutSubviews
  • viewDidLayoutSubviews
  • viewDidAppear
于 2014-01-24T09:58:56.107 回答
5

viewDidLoad 不是放置依赖于 IB 对象帧大小的代码的好地方。如果您在 viewDidLoad 中记录滚动视图的 contentSize,您将看到它是 (0,0)。将代码(设置内容大小的位置)移动到 viewDidAppear,它将正常工作。

于 2013-04-02T20:41:33.167 回答
4

检查这些

  • 已启用用户交互
  • 已连接插座
  • 包含的内容大小大于界限
  • 滚动启用

例如

scrollView.contentSize = CGSizeMake(320, 640);

我的故事板看起来像这样的滚动视图[工作]

在此处输入图像描述

于 2013-04-02T20:40:23.077 回答
3

问题很可能与自动布局有关。UIScrollView 在使用 AutoLayout 时需要特别注意。

快速修复 - 将滚动的子视图之一绑定到它的超级视图(滚动视图)的顶部和底部空间。

长话短说:关于 SO 的问题: UIScrollView 不滚动,无论 contentSize 大UIScrollView 都不会滚动,即使在设置了内容大小之后UIScrollView 也不使用自动布局约束

苹果的文档: https ://developer.apple.com/library/ios/technotes/tn2154/_index.html

于 2014-01-29T09:30:08.390 回答
3

我在viewDidAppear中有完全相同的代码行,但它不起作用

将其移至viewDidLayoutSubviews并正常工作

[scrollView setContentSize:CGSizeMake(320, 500)];

感谢trick14的回答。

于 2014-01-28T23:10:11.053 回答
1

Trip14 的回答对我有用。我迅速将其编码为:

override func viewDidLayoutSubviews() {

          (self.view as! UIScrollView).contentSize = CGSizeMake(600, 600)
        }
于 2016-01-19T02:57:05.097 回答
0

这似乎是一个类似的问题。其他故事

这可能是故事板中的自动布局或约束的问题。

于 2013-04-02T21:24:05.420 回答
0

故事板的最佳方式:

按照图片,最好的方式

于 2020-10-14T10:04:02.230 回答