如何在Interface Builder中使用UIScrollView?

Geo*_*old 95 iphone interface-builder uiscrollview ios

虽然我UIScrollView过去通过编程方式成功地使用它,但是通过在Interface Builder中专门设置它而无法使它工作.

我的iPhone应用程序中有一个简单的"关于"页面.它有UITextView一些图标和我其他应用程序的链接.我已经将所有这些视图添加到了我的视图中UIScrollView,使它们的总大小> 480.当我启动我的应用程序时,scrollview只显示适合屏幕的内容,而不会滚动任何内容.

是否可以通过IB完全执行此操作,还是必须通过代码操作contentSize?

Ste*_*ntz 130

您忘了设置UIScrollView的contentSize属性.奇怪的是,你不能从Interface Builder那里做到这一点.您必须从管理此滚动视图的视图控制器执行此操作.

  • 我试图弄清楚如何在Interface Builder中设置contentSize,并找到了这个讨论.至少对我来说,在Xcode 4.5中,我可以使用"用户定义的运行时属性"来设置它,方法是添加一个名为`contentSize`的类型为`Size`的条目,并设置所需的值. (46认同)
  • 哇,有点让IB相当,毫无意义......这就是诀窍,谢谢. (42认同)
  • 您可以创建UIScrollvView的子类,检查(0,0)处是否只有一个子视图,然后根据该子视图自动设置contentSize. (20认同)
  • 我仍然感到困惑的是,为什么iOS不仅仅是_自动设置基于其子视图的维度的滚动视图的`contentSize`,至少作为默认行为. (5认同)
  • 请记得关闭自动布局(xcode 5.1) (4认同)

Her*_*mps 113

Boby_Wan的回答让我思考,我发现以下解决方案从Interface Builder配置UIScrollView的contentSize:

  1. UIScrollView在故事板场景中选择
  2. 转到Identity检查器,创建一个新的用户定义的运行时属性(单击+按钮)
  3. 将属性键路径更改为contentSize
  4. 将属性Type更改为Size
  5. 现在将设置为{ 所需内容宽度,所需内容高度 }

例如,将值设置为{320,920}将允许用户向下滚动iPhone上的整个额外屏幕.

(我使用的是xcode 4.3.3,项目的iOS部署目标是5.1)

当我第一次这样做时,我收到了以下错误:

非法配置:
     使用4.3
     MainStoryboard.storyboard 之前的Xcode版本的大小类型用户定义的运行时属性

如果您也收到此错误,则修复起来很简单:在Project Navigator中选择Storyboard ,然后调出File检查器.查找/展开" 界面生成器文档"部分,并提供" 开发"下拉列表.确保将其设置为Xcode 4.3

  • 太棒了!PS:我很惊讶这是苹果公司能做的最好的事情.我想这表明即使是苹果员工也从不使用他们自己的工具(界面建设者):). (7认同)

Dan*_*kin 25

使用Autolayout(iOS6 +),您可以避免设置contentSize.改为设置以下约束:

  1. 将scrollview的顶部固定在其最顶层子项的顶部.
  2. 并将底部固定在最底层儿童的底部.


Ant*_*hev 18

您只能使用Interface Builder,转到Identity Inspector(第三个检查器选项卡)并添加新的User Defined Runtime属性,

  • 关键路径: contentSize
  • 类型: 尺寸
  • 价值: {宽,高}


Rob*_*rRM 14

现在有一种方法可以在UIScrollView不离开Storyboard的情况下制作卷轴:

  1. 选择UIScrollView在故事板,转到尺寸检查和更换底部的值(或任何你需要改变其他值)内容插图部分内容区域的高度.
  2. 现在转到Identity检查器并创建一个新的用户定义的运行时属性(通过单击+按钮)并为其命名contentSize.您填写的类型无关紧要(您甚至可以保留其默认值).

这将使UIScrollView工作正常,虽然我不知道为什么第二步是必要的(我偶然发现).:(