如何将UIScrollView添加到Interface构建器?

ero*_*ppa 20 iphone interface-builder

我将所有控件都放在界面构建器中(许多标签,按钮等).如何将它们全部放在界面构建器的滚动视图中,以便我可以拥有更多空间并能够向上和向下滚动以显示更多控件?我是否必须以编程方式执行此操作?

mah*_*udz 30

打开包含所有控件和标签等的视图(在Interface Builder中).全选.然后在"编辑器"菜单下,选择"嵌入",然后选择"滚动视图".

注意:在较旧的Xcode版本中,这是在Layout菜单下,然后嵌入对象...(滚动视图).

  • 在IB中,确保scrollview足够小,以便在应用程序运行时整个视图在视图中可见.换句话说,它的边界/框架需要小于或等于它所在的视图.然后,在你的应用程序中,你需要设置scrollview.contentSize =视图的大小与所有按钮,标签等.这将大于您为scrollview设置的帧/边界.如果一切正常,那么您应该能够滚动而不需要其他任何工作. (10认同)
  • 这不能按预期工作.现在一切都在UIScrollView下,但是当我加载应用程序时,什么都不可滚动.为什么? (2认同)

Ada*_*dam 25

我首选的解决方案,您不需要对contentSize的大小进行硬编码:


注意:您可以使用这里的技巧来避免源代码部分:https://stackoverflow.com/a/11239123/153422 - 虽然我还没有尝试过.

这个技巧的其余部分......无论如何你仍然需要使用


  1. 将所有控件移动到单个UIView中(在IB中:选择全部,然后转到布局>嵌入对象...>视图)

  2. 使用IBOutlet属性将单个UIView连接到源代码(见下文)

  3. 在源代码中,不是界面构建器(IB在这里被破坏,它有错误地设置UIScrollView的原点 - 它试图使视图居中.苹果从不打扰检查它的基本错误,叹息):移动单个UIView进入UIScrollView(见下面的代码).

  4. 使用sizeThatFits"自动"设置正确的大小.

代码(StackOverflow不允许我将代码放在编号列表中.叹气)

头文件:

/** outlet that you hook up to the view created in step 1 */
@property(nonatomic, retain) IBOutlet UIView *masterView;
Run Code Online (Sandbox Code Playgroud)

班级档案:

/** inside your viewDidLoad method */
[scrollview addSubview: masterView]; // step 3
scrollView.contentSize = [masterView sizeThatFits:CGSizeZero]; // step 4
Run Code Online (Sandbox Code Playgroud)

...虽然我最近没有检查过这个问题,但IIRC对2.x和3.x都有效