使用Storyboard在Xcode 4.2中设计ScrollView

28

我有一个竖向滚动的UIScrollView - 想象一下一个选项卡应用程序中“关于此应用程序”页面,它需要一个滚动视图才能浏览。它只包含几个图片、一个视频和一些文本(只有视频已经编码完成,其余内容都已放置在GUI中)。在故事板(Interface Builder?)Xcode 4.2中,一切都按照设定正常工作,但是视图的大小仅限于屏幕上看到的内容,无法在故事板中手动排列最初不在屏幕上方出现的项目 - 需要向上滚动才能查看吗?我目前找到的唯一方法是将它们设计在可见视图上,然后使用箭头键将它们导航到下面。

9个回答

51

在故事板中选择viewController,然后在属性检查器中将“大小”更改为“自由形式”。然后将视图/滚动视图的“高度”更改为所需的尺寸。当应用程序运行时,struts和springs的默认设置应该会正确地调整视图的大小,但你应该进行双重检查。


这似乎很好用,直到我尝试在Storyboard中调整视图或滚动视图的大小时,此时所有内容都会随着视图大小的变化而扭曲... - Jay
给John,实际上这不是问题。如果你进入那个滚动视图的“尺寸检查器”并修改“自动调整大小”,请清除矩形内部的水平和垂直箭头。(我也清除了“右侧”和“底部”箭头,以便我的滚动视图可以与左上角相连)。然后,滚动视图的大小就不会受到父视图大小的影响。 - Wayne Liu
没有所谓的大小或自由形式。 - user4951
哦,原来如此。首先尽可能地将UIScrollView变大,然后依靠Struts进行计数。 - user4951
很好的建议。请注意,ScrollView必须是根/主视图才能正常工作。 - Ben H
我对这些指示有点困惑。在将 ViewController 更改为自由形式后,我只是保持 ViewController 选中状态并切换到大小检查器,然后更改了高度。 - Adam Johns

40

我理解你的痛苦。 我找到的唯一方法是手动在“大小检查器”中平移滚动视图,以显示要编辑的部分。

使用UIView包含元素,使它们相对于此视图位置。 将视图作为子视图添加到scrollview中的0,0位置。

  1. 平移:使用Y坐标,例如-200,然后编辑内容。
  2. 为了放置更多的内容在隐藏部分,再次平移以显示新的空间。
  3. 完成后,请恢复ScrollView的高度和X,Y位置的值。

请确保滚动视图的框架矩形小于所包含视图的矩形。


16
解决一个本不应该存在的问题的好方法! - James Webster

25

新消息:3/26/2013

我偶然发现了在Storyboard中直接处理UIScrollView甚至更简单的方法。

  1. 不需要任何代码,只需在Storyboard设置即可。这可能是iOS6.1 / Xcode 4.6中新增的功能。
  2. 不需要禁用约束(即在File Inspector中取消Storyboard文件的“使用自动布局”复选框)。
  3. 不需要在.h中添加UIScrollView * scrollView;。
  4. 不需要在viewWillAppear或viewDidLoad的覆盖中添加self.scrollView.contentSize = ...。

以下是我所做的事情(重点部分用**标出):(见code

  1. 创建一个启用storyboard的新项目
  2. 拖入一个UIScrollView,在身份检查器中为视图控制器设置类
  3. 在属性检查器中,将模拟指标下的大小更改为自由形式**
  4. 选择scroll View; 在属性检查器中,打开“滚动启用”和“背景”到“白色”(如果您不知道为什么,您会发现)
  5. 在大小检查器下(选择滚动视图),将高度更改为900,例如**
  6. 添加按钮,一个在顶部,一个在底部
  7. 为两个按钮添加默认的buttonTouchUpInside处理程序,并简单地记录发送者。

请参见Code选择视图控制器和滚动视图并检查检查器。


6
这个主题有很多文献,但你是我遇到的第一个真正回答该死问题的人。FREEFORM就是解决它的方法。我花了很长时间来尝试弄清楚这个问题,感谢你的分享! - tw airball
3
视图控制器的自由形式? - coolcool1994

11

只需将视图控制器的“模拟尺寸”更改为自由形式,并设置比通常尺寸更大的高度,您就可以看到所有需要编辑的出口。


这应该是被接受的答案...更加优雅的解决方案。 - Ciprian

4
在iOS 6.0上,您可以在滚动视图中拖动一个容器视图。这将自动为您的内容创建一个新视图,不在当前场景之内。然后,您可以将此视图调整为足够大以适应您的内容。 我认为您仍然需要在运行时设置ScrollView内容高度,但至少您可以一次性设计您的内容视图,而无需在IB上上下滚动。

我认为你应该设置容器视图的高度,而不是ScrollView的内容高度。我想知道的是如何使用布局约束将容器视图的高度设置为嵌入视图的高度。你有什么想法吗? - Fieg

2

只需取消任何你想要调整大小的视图中的“自动调整子视图”复选框,它就可以防止所有对象随其一起调整大小。


0

我已经苦恼了一段时间,尝试过各种方法都失败了。

具体来说,我想要实现一个自由大小的模态对话框,其中包含一个容器视图的可滚动视图。我已经尝试了许多不同的方法,有时候它能够正常工作。但大多数情况下,它看起来完全正确,但是无法滚动。

最后我下载了Dickey Singh的代码,它非常完美地运行了,但是没有什么特别之处。(顺便说一句,这是一个很棒的干净解决方案)。因此,我像我的代码一样添加了一个容器视图,结果却出了问题!

经过一些尝试,我弄清楚了发生了什么。请耐心听我说。

1)使用自动布局,滚动视图的大小似乎决定了滚动边界。在“用户定义的运行时属性”中设置“contentSize”似乎对此没有影响,设置“viewWillDisplay”或“viewDidLoad”中的“contentSize”或“bounds”也是如此。因此,如果滚动视图的初始大小为800x800,那么将显示所有的空间。因此,当我想要创建一个可滚动区域时,我会创建一个容器视图,然后将滚动视图放在内容中。

2) 没有使用自动布局,可以通过在“用户定义的运行时属性”中设置“contentSize”,或在“viewDidLoad”中以编程方式设置来实现。我更喜欢使用“用户定义的运行时属性”,因为它可以与布局一起保持大小。这种解决方案允许您在设计时使用任何大小的滚动视图,从而使其更加灵活。

3) 无论是否使用自动布局,如果滚动区域内的任何视图恰好匹配水平或垂直框架边界中的任意一个,则滚动视图将停止正常工作。这适用于我的代码和Dickey Singh的代码,在我尝试的每种可能的配置中都是如此。

我不知道是什么原因导致了(3),但显然这是一个错误。

我希望这能帮助所有正在努力使用滚动视图的人。我想有些人使用它们没有任何问题,而有些人(像我一样)遇到了很多问题。


0

我目前正在为iOS 7开发一个应用程序,我完全照着@Dickey Singh的答案做了,但一开始它并没有起作用。 经过查看故事板,我发现我们还需要为持有scrollView的视图控制器添加自动布局约束。 似乎在Xcode 5之前,这样的自动布局约束会自动添加,但现在我们需要自己添加。 添加约束的方法:首先在Storyboard中选择视图控制器; 在顶部菜单中输入“Editor”; 选择“解决自动布局问题”; 选择“在容器中添加缺失的约束”。 完成 :-)


0

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