使用Interface Builder创buildUIScrollView的步骤

我正在尝试使用UIScrollView,似乎有一些基本的东西,我只是不理解。

比方说,我想在我的iPhone应用程序中使用UIScrollView。 我有一个充满了320x700button的视图。 显然,这对于320×480的iPhone来说太大了。 所以我知道我必须使用UIScrollView。 但是,这是我应该创造的对象的顺序

  1. 在“视图”中创build尺寸为320×700的UIScrollView
  2. 将所有的button等放在这个滚动视图上
  3. 在viewDidLoad中设置contentSize为320×700
  4. 将UIScrollView的委托设置为文件所有者,将FileOwner的视图设置为UIScrollView
  5. 将视图的大小重新设置为320×480。

这是正确的吗?

这有用,但对我来说没有意义。 我认为视图应该是canvas,我添加所有UI元素。 我想要iPhone应用程序的“canvas”为320×700,我希望能够把我的button等放在这个320×700的canvas上。 但是,如果我不将UIScrollView的大小更改回320×480,则不会滚动,因为我需要将UIScrollView的内容大小设置为大于其大小。

但是,如果我将UIScrollView的大小设置为320×480,那么在界面生成器中,我看不到屏幕和介于480和700之间的button! 所以看起来我应该进行所有编辑,并将所有UI元素添加到UIScrollView,然后将其重新设置为320×480!

有没有其他方法可以做到这一点更有意义? 我在理解这个应该如何工作时错过了什么?

UPDATE

我已经发布了另一个我认为更简单,更好的解决scheme 。

原版的

下面是另一种方法来做到这一点,你可能会更喜欢:

  1. 将文件所有者占位符的自定义类设置为您的视图控制器子类。
  2. 创buildUIScrollView作为您的笔尖顶级对象。 将其大小设置为屏幕大小(320×460),或者只需打开“模拟度量标准”下的状态栏即可。
  3. 将滚动视图的代理sockets连接到文件的所有者。
  4. 将文件所有者的view出口设置为滚动视图。
  5. 创build一个UIView作为你的笔尖中的另一个顶级对象。 这将是您的内容视图。
  6. 将内容视图的大小设置为320×700。
  7. 在视图控制器(文件的所有者)中创build一个名为contentView的强大(或保留,如果不使用ARC)sockets并将其连接到内容视图。
  8. 把你的button放在内容视图中。
  9. 在你的视图控制器的viewDidLoad ,做到这一点:

     - (void)viewDidLoad { [super viewDidLoad]; [self.view addSubview:self.contentView]; ((UIScrollView *)self.view).contentSize = self.contentView.frame.size; } 
  10. 在你的视图控制器的viewDidUnload ,做到这一点:

     - (void)viewDidUnload { self.contentView = nil; [super viewDidUnload]; } 

滚动按钮项目窗口
全尺寸

你是对的,视图是你添加所有UI元素的canvas。 界面生成器起初有点怪异,但是你会习惯它,这就是它的工作方式。

你被困在事实上,你必须调整ScrollView的大小。 你应该这样想:ScrollView有一个框架大小和内容大小。 它的构build方式是,如果内容大小大于框架大小,则会滚动。 您必须使界面构build器中的框架尽可能的大,以便您可以定位到内部的元素。 当你运行应用程序时,你应该调整滚动的框架,以适应iPhone的屏幕分辨率。 您的控件没有任何意义的框架比屏幕更大。

 -------------------------------------------- | | | | | | | | | | | | | | | | | | |<------------------ iPhone Screen frame | | | | | | | | | | | | | | | |<------- ScrollView Content size | | | | | | | | | | |<----------------- ScrollView Frame Size | | | | | | | | | | | | | | | | | | | | | ------------------------ | | | | | | | -------------------------------------------- 

我希望这种表示方式能够使事情变得更加明确。换句话说,滚动框架就是你可以看到内容的洞穴,如果整体和内容一样大,那么你就不需要滚动因为你可以看到这一切。

我会build议还试图编写代码中的组件,而不使用IB来获得更好的理解。