使用Interface Builder创建UIScrollView的步骤

时间:2012-02-02 19:38:12

标签: iphone ios uiview uiscrollview

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

假设我想在我的iphone应用程序中使用UIScrollView。我有一个视图,其中包含320x700的按钮。显然,这对于320x480的iPhone来说太大了。所以我知道我必须使用UIScrollView。但是,这是我应该创建对象的顺序

  1. 创建一个320x700的UIScrollView作为“View”
  2. 中的尺寸
  3. 将我的所有按钮等放在此滚动视图
  4. 在viewDidLoad中将contentSize设置为320x700
  5. 将UIScrollView的委托设置为文件所有者,将FileOwner的视图设置为UIScrollView
  6. 将View的大小重置为320x480。
  7. 这是对的吗?

    这有效,但对我来说没有意义。我认为View应该是画布,我在其中添加了所有的UI元素。我希望iPhone应用程序的“画布”为320x700,我希望能够将我的按钮等放在这个320x700画布上。但是,如果我不将UIScrollView的大小更改回320x480,它将不会滚动,因为我需要将UIScrollView的内容大小设置为大于其大小。

    但是如果我将UIScrollView的大小设置为320x480,那么我在Interface Builder中看不到屏幕和480到700之间的按钮!因此,似乎我应该进行所有编辑并将所有UI元素添加到UIScrollView,然后将其设置回320x480!

    还有其他方法可以做到更有意义吗?在理解这应该如何工作的过程中,我错过了什么?

2 个答案:

答案 0 :(得分:43)

更新

我发布了another solution here我认为更简单,更好。

ORIGINAL

以下是您可能更喜欢的另一种方法:

  1. 将文件所有者占位符的自定义类设置为视图控制器子类。
  2. 在您的笔尖中创建UIScrollView作为顶级对象。将其大小设置为屏幕大小(320x460)或只需打开“模拟指标”下的状态栏。
  3. 将滚动视图的delegate插座连接到文件所有者。
  4. 将文件所有者的view插座设置为滚动视图。
  5. 在您的笔尖中创建一个UIView 另一个顶级对象。这将是您的内容视图。
  6. 将内容视图的大小设置为320x700。
  7. 在视图控制器(文件所有者)中创建一个名为contentView的强大(或保留,如果不使用ARC)插座,并将其连接到内容视图。
  8. 将您的按钮放在内容视图中。
  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];
    }
    
  11. scrollbuttons project window
    Full size

答案 1 :(得分:5)

你是对的,View是添加所有UI元素的画布。 界面构建器起初有点奇怪,但你会习惯它,这就是它的工作方式。

您必须坚持必须调整ScrollView的大小。你应该这样想: ScrollView具有帧大小和内容大小。它的构建方式是,如果内容大小大于帧大小,那么它将滚动。您必须在界面构建器中使框架尽可能大,以便您可以定位内部元素。当您运行应用程序时,您应该调整滚动框架的大小以适应iPhone的屏幕分辨率。控件的框架大于屏幕是没有意义的。

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

我希望这种表示方式能让人们更清楚地了解事情应该如何工作。换句话说,滚动框架就是你可以看到内容的洞,如果整体与内容一样大那么你就有了无需滚动cos,你可以看到它。

我建议也尝试在代码中编写组件而不使用IB来更好地理解。