故事板UIScrollView的内容大小?

15

我感觉我已经涉及到每一个可能导致问题的原因了,但是在我的Storyboard中,我有一个UIScrollView被连结到了一个outlet,并且在viewDidLoad中我设置了contentSize以便可以滚动(比我的框架尺寸要大)!

然而,无论我做了什么改变,我都无法滚动!在我的scrollView中我有几个文本框并启用了弹性效果,所以当进行测试时,我可以看到它随着其中的子视图上下滑动,但是无论我将contentSize设置为多少,我都无法滚动。

我可能缺失了什么/需要检查些什么?这是UIScrollView在Storyboard中使用时已知的问题吗?

更奇怪的是,我可以像这样操作:[scrollView setBackgroundColor:[UIColor blueColor]]; 我就会得到一个蓝色的滚动视图!但是设置contentSize失败。

编辑

我的唯一代码(除此之外,scrollView只是放置在storyboard视图控制器中):

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

记录的框架,输出与预期相符:

width: 320.00
height: 504.00

编辑2

事实证明,在我的故事板中删除滚动视图的任何子视图,它就可以正常滚动。如果我通过故事板添加任何子视图,即使是一个空的全新UIButton,它也不会应用contentSize / 允许滚动。


在您的帖子中编辑,包括您的 viewDidLoad 方法。 - rob mayoff
好的,这只需要一行代码设置 contentSize。 - Josh Kahane
记录滚动视图的框架,并将其包含在内。 - Lithu T.V
完成了,输出结果和预期一样,有点奇怪。 - Josh Kahane
你是在4英寸的屏幕上测试吗?https://dev59.com/VGcs5IYBdhLWcg3wcTk0#20575798 - PostCodeism
为什么会发生你在EDIT2中描述的事情?这也发生在我身上,真是让人烦恼! - Van Du Tran
8个回答

48

使用ViewDidLayoutSubviews

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

UIViewController的方法调用顺序如下:

  • awakeFromNib
  • viewDidLoad
  • viewWillAppear
  • viewWillLayoutSubviews
  • viewDidLayoutSubviews
  • viewDidAppear

5

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


那就是了,我只是将我的滚动视图拖入了我的视图控制器中,连接了它,启用了滚动、交互等功能,我唯一的代码就是设置内容大小。 - Josh Kahane
@JoshKahane,请记录scrollView以确保您已正确连接它。 - rdelmar
@JoshKahane,同时确保你的实现中有[super viewDidAppear:animated];。我不认为这是你的问题,但你应该始终如此。 - rdelmar
@JoshKahane,还有一件事。滚动视图的框架大小是多少?如果与内容大小一样大,它就不会滚动。 - rdelmar
1
你应该重写viewDidLayoutSubviews方法,在那里你的所有框架已经设置好了。 - OscarVGG
显示剩余4条评论

4

请检查以下内容

  • 启用用户交互
  • 已连接外部输出口
  • 包含的内容大小超出边界
  • 启用滚动

例如

scrollView.contentSize = CGSizeMake(320, 640);

我的滚动视图故事板看起来是这样的[可用]:

输入图片描述


3

我曾在viewDidAppear中使用过完全相同的一行代码,但它没有起作用。

将其移至viewDidLayoutSubviews后,它可以正常工作。

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

感谢 trick14 的答案。



3
问题很可能出在自动布局上。UIScrollView在使用AutoLayout时需要特别注意。
快速解决方法-将滚动视图的子视图之一绑定到其父视图(即滚动视图)的顶部和底部空间。
长话短说: 关于此问题的问题: UIScrollView not scrolling regardless of large contentSize, UIScrollView will not scroll, even after content size set, UIScrollView doesn't use autolayout constraints

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

快速修复 - 将滚动视图的子视图之一绑定到其父视图(滚动视图)的顶部和底部空间。 - Vassily
当出现“无滚动”问题时,检查此项非常重要。 - David

1
Trip14的答案对我有用。在Swift中,我编写了以下代码:
override func viewDidLayoutSubviews() {

          (self.view as! UIScrollView).contentSize = CGSizeMake(600, 600)
        }

这个方法需要在Swift中实现。 - iPhone 7

0

使用Storyboard是最好的方式:

follow the picture ,best way


0

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

这可能与故事板中的自动布局或约束有关。


似乎是可能的,只是我听别人说自动布局对他们没有影响。不过还是谢谢你指引我方向,我会进一步调查。 - Josh Kahane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接