我正在尝试使用UIScrollView,似乎有一些基本的东西,我只是不理解。
假设我想在我的iphone应用程序中使用UIScrollView。我有一个视图,其中包含320x700的按钮。显然,这对于320x480的iPhone来说太大了。所以我知道我必须使用UIScrollView。但是,这是我应该创建对象的顺序
这是对的吗?
这有效,但对我来说没有意义。我认为View应该是画布,我在其中添加了所有的UI元素。我希望iPhone应用程序的“画布”为320x700,我希望能够将我的按钮等放在这个320x700画布上。但是,如果我不将UIScrollView的大小更改回320x480,它将不会滚动,因为我需要将UIScrollView的内容大小设置为大于其大小。
但是如果我将UIScrollView的大小设置为320x480,那么我在Interface Builder中看不到屏幕和480到700之间的按钮!因此,似乎我应该进行所有编辑并将所有UI元素添加到UIScrollView,然后将其设置回320x480!
还有其他方法可以做到更有意义吗?在理解这应该如何工作的过程中,我错过了什么?
答案 0 :(得分:43)
我发布了another solution here我认为更简单,更好。
以下是您可能更喜欢的另一种方法:
UIScrollView
作为顶级对象。将其大小设置为屏幕大小(320x460)或只需打开“模拟指标”下的状态栏。delegate
插座连接到文件所有者。view
插座设置为滚动视图。UIView
另一个顶级对象。这将是您的内容视图。contentView
的强大(或保留,如果不使用ARC)插座,并将其连接到内容视图。在视图控制器的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];
}
答案 1 :(得分:5)
你是对的,View是添加所有UI元素的画布。 界面构建器起初有点奇怪,但你会习惯它,这就是它的工作方式。
您必须坚持必须调整ScrollView的大小。你应该这样想: ScrollView具有帧大小和内容大小。它的构建方式是,如果内容大小大于帧大小,那么它将滚动。您必须在界面构建器中使框架尽可能大,以便您可以定位内部元素。当您运行应用程序时,您应该调整滚动框架的大小以适应iPhone的屏幕分辨率。控件的框架大于屏幕是没有意义的。
--------------------------------------------
| | | |
| | | |
| | | |
| | | |
| | |<------------------ iPhone Screen frame
| | | |
| | | |
| | | |
| | | |<------- ScrollView Content size
| | | |
| | | |
| | |<----------------- ScrollView Frame Size
| | | |
| | | |
| | | |
| | | |
| | | |
| ------------------------ |
| |
| |
| |
--------------------------------------------
我希望这种表示方式能让人们更清楚地了解事情应该如何工作。换句话说,滚动框架就是你可以看到内容的洞,如果整体与内容一样大那么你就有了无需滚动cos,你可以看到它。
我建议也尝试在代码中编写组件而不使用IB来更好地理解。