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

时间:2009-10-05 17:19:13

标签: iphone interface-builder

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

10 个答案:

答案 0 :(得分:30)

打开包含所有控件和标签等的视图(在Interface Builder中)。全选。然后在Editor菜单下,选择Embed In,然后选择Scroll View。

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

答案 1 :(得分:25)

我首选的解决方案,您无需硬编码contentSize的大小:


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

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


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

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

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

  4. 使用sizeThatFits“自动”设置正确的大小。

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

    标题文件:

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

    班级档案:

    /** inside your viewDidLoad method */
    [scrollview addSubview: masterView]; // step 3
    scrollView.contentSize = [masterView sizeThatFits:CGSizeZero]; // step 4
    

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

答案 2 :(得分:4)

很容易:

首先在视图中添加scrollview。 更改滚动视图的大小(例如,使其长度为700像素)。 开始放置控件 如果要在较低(不可见)部分放置/编辑控件,请选择滚动视图并将Y开始位置更改为-300。 瞧。 编辑完成后,将Y开始位置设置为0或其他任何位置。

答案 3 :(得分:4)

我不知道这只是我,但我试着按照其他每个答案中的说明进行操作,但没有一个能够奏效。没有一个答案包括所需的一切,每一个我猜我们都知道要做一些事情,所以留下那个部分。我终于在red artisan. 的帮助下弄清楚了......所以......我在这里列出了所有必要的步骤来实现这个目的:

  1. 在InterfaceBuilder中,添加一个视图,然后将控件添加到它(或者如果您的控件已存在于主视图中,您可以选择所有控件,然后转到编辑器|嵌入|视图,然后拖动那个新的视图所以它在主视图之外都是独一无二的)。此视图可以是您喜欢的任何大小。

  2. 在InterfaceBuilder中,将滚动视图添加到主视图中,并调整其大小以占据整个主视图。

  3. 将下面列出的代码添加到您的UIViewController标头和类文件中。

  4. 在InterfaceBuilder中,将包含控件的视图连接到文件所有者中的“contentView”。将“滚动视图”连接到“文件所有者”中的“scrollView”。

  5. 标题文件:

        @interface MyViewController : UIViewController
         @property(nonatomic, retain) IBOutlet UIScrollView *scrollView;  
         @property(nonatomic, retain) IBOutlet UIView *contentView;  
    

    班级档案:

        @synthesize scrollView, contentView;
    
        - (void)viewDidLoad
        {
            [super viewDidLoad];    
            [self.scrollView addSubview:self.contentView];
            self.scrollView.contentSize = self.contentView.bounds.size;
        }
    
        - (void)viewDidUnload
        {  
            self.scrollView  = nil;
            self.contentView = nil;
            [super viewDidUnload];
        }
    

答案 4 :(得分:3)

选择要放入滚动视图的所有对象,然后转到布局菜单,选择“嵌入对象”并选择“滚动视图”。

答案 5 :(得分:1)

虽然这个问题已经很久了,但我会建议我找到一个解决方法,因为我遇到了同样的问题,并且无法找到很多帮助:

在IB中,如果要将对象放在420像素之外,只需确保为包含视图的所有状态栏,顶栏和底栏选择未指定包含所有对象的滚动视图。这样,您就可以手动调整屏幕大小(对于View)。然后,您可以按照Ximonn的建议调整Scroll View的 H 值,访问所有其他对象,使用它们然后撤消 H 值的更改然后设置所需的条。

答案 6 :(得分:1)

重要的小事。 要在UIScrollView中滚动大子视图(例如UIImageView),请记住,对于此子视图,取消选中InterfaceBuilder中的“User Interaction Enabled”复选框 - >查看窗口。或者以编程方式进行。

subview.userInteractionEnabled = NO;

否则此子视图将在屏幕上堆叠而不会产生任何影响。

答案 7 :(得分:0)

我已经找了好几天了,我终于找到了一个适合我的解决方案。

Scrolling with UIScrollView

基本上你的主视图中包含一个UIScrollView对象。然后是另一个内容视图,其中包含您的所有内容。然后将内容视图添加到滚动视图。然后最终将scrollview的内容大小设置为内容视图的大小。

答案 8 :(得分:0)

我知道,这个帖子有点老了......但有人可以在google上找到它,它的排名很高。 我写了这个小助手方法来完成工作:

- (void)addSubview:(UIView *)theSubView toScrollView:(UIScrollView *)theScrollView
{
    [theScrollView addSubview:theSubView];
    theScrollView.contentSize = theSubView.bounds.size;
}

你只需要在标题中声明两个IBOutlet(例如contentViewscrollView)并调用这样的方法,无论你想将UIView加载到{{1}与您的源代码:

UIScrollView

我在viewDidLoad

中调用它

此方法以iOS

为特色

答案 9 :(得分:0)

所选答案适用于Xcode 3。

但是,对于Xcode 4,菜单已经稍微重新排列。

要在Xcode 4中执行相同操作,请选择您的视图,然后使用:

编辑器>嵌入>滚动视图