【发布时间】:2014-01-26 12:48:24
【问题描述】:
这是一个故事板应用程序。我在默认情况下位于视图控制器中的UIView 之上添加了一个UIScrollView。然后我在滚动视图上添加了一些 UI 元素。在设计了 Scroll 视图的可视部分之后,我使用它的手柄将它垂直拉伸并向上推了一点,以便我可以看到该部分来设计屏幕的其余部分。完成后,我将滚动视图放回以适应视图。请注意,我没有调整滚动视图的大小以匹配 IB 的视图大小。
然后我将所有 4 个约束添加到滚动视图(超级视图的前导和尾随空间,超级视图的顶部和底部空间)。然后我选择了UIView,打开了尺寸检查器并将底部空间更改为superview的值为0。这会自动调整UIScrollView的大小以适应视图控制器。
然后我在viewDidLoad 方法中添加了以下代码行。
self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.scrollView.frame.size.height);
self.scrollView.frame = self.view.frame;
但这不起作用。 UIScrollView 不会滚动。是的,滚动已启用。
谁能告诉我这里可能缺少什么?
谢谢。
编辑:
我找到了我的一个旧项目here。它利用了我刚刚在上面解释的方式,并且有效!不知道为什么它不再。
我还在这里添加了 demo project 来解决这个问题。
【问题讨论】:
-
您已将内容大小和框架设置为相同.. 所以滚动视图不会滚动。
-
此外,在
viewDidLoad期间,视图未完全布局,因此未设置尺寸(框架)。尝试将您的代码放入viewWillAppear -
@bobnoble 你是对的。我将代码移入
viewDidAppear方法,并将self.scrollView.frame.size.height的值硬编码为 700,现在它可以工作了。我不明白的是,我以前的方式过去对我有用。我找到了我的一个旧项目(在这里)[www54.zippyshare.com/v/37137086/file.html].在其中,我将它放在viewDidLoad中,并且没有硬编码值。 -
@Isuru - 在您提供链接的示例项目中,滚动视图
contentSize高度是用self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, 627);硬编码的。 -
如果你用
self.scrollView.frame.size.height替换它,它仍然有效。我真的不喜欢硬编码值。这就是为什么我正在寻找一种动态的方法。
标签: ios objective-c uiview uiviewcontroller uiscrollview