使用Interface Builder创buildUIScrollView的步骤
我正在尝试使用UIScrollView,似乎有一些基本的东西,我只是不理解。
比方说,我想在我的iPhone应用程序中使用UIScrollView。 我有一个充满了320x700button的视图。 显然,这对于320×480的iPhone来说太大了。 所以我知道我必须使用UIScrollView。 但是,这是我应该创造的对象的顺序
- 在“视图”中创build尺寸为320×700的UIScrollView
- 将所有的button等放在这个滚动视图上
- 在viewDidLoad中设置contentSize为320×700
- 将UIScrollView的委托设置为文件所有者,将FileOwner的视图设置为UIScrollView
- 将视图的大小重新设置为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 。
原版的
下面是另一种方法来做到这一点,你可能会更喜欢:
- 将文件所有者占位符的自定义类设置为您的视图控制器子类。
- 创build
UIScrollView
作为您的笔尖顶级对象。 将其大小设置为屏幕大小(320×460),或者只需打开“模拟度量标准”下的状态栏即可。 - 将滚动视图的代理sockets连接到文件的所有者。
- 将文件所有者的
view
出口设置为滚动视图。 - 创build一个
UIView
作为你的笔尖中的另一个顶级对象。 这将是您的内容视图。 - 将内容视图的大小设置为320×700。
- 在视图控制器(文件的所有者)中创build一个名为
contentView
的强大(或保留,如果不使用ARC)sockets并将其连接到内容视图。 - 把你的button放在内容视图中。
-
在你的视图控制器的
viewDidLoad
,做到这一点:- (void)viewDidLoad { [super viewDidLoad]; [self.view addSubview:self.contentView]; ((UIScrollView *)self.view).contentSize = self.contentView.frame.size; }
-
在你的视图控制器的
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来获得更好的理解。