2009-10-05 266 views
20

我有我的所有控件在界面生成器(许多标签,按钮等)布局。我如何将它们全部放入界面生成器的滚动视图中,以便我可以获得更多空间并能够上下滚动以显示更多控件?我必须以编程方式执行此操作吗?如何将UIScrollView添加到Interface Builder?

回答

30

打开包含所有控件和标签等的视图(在Interface Builder中)。全选。然后在编辑器菜单下,选择嵌入,然后选择滚动视图。

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

+0

马克·w ^打我给它。 – mahboudz 2009-10-05 17:32:20

+2

这不符合预期。现在一切都在UIScrollView下,但是当我加载应用程序时,没有什么可滚动的。为什么? – erotsppa 2009-10-06 02:33:01

+10

在IB中,请确保滚动视图足够小,以便在应用运行时,视图中可以看到整个视图。换句话说,它的边界/框架需要小于或等于它所在的视图。 然后,在您的应用程序中,您需要使用所有按钮,标签等设置视图的scrollview.contentSize =大小。这将比您为滚动视图设置的框架/边界更大。 如果一切正常,那么你应该可以在没有其他工作的情况下进行滚动。 – mahboudz 2009-10-06 03:20:05

3

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

25

我首选的方案,在这里你不需要硬编码的contentSize的大小:


注意:您可能能够避免这种源代码部分使用这里的伎俩:https://stackoverflow.com/a/11239123/153422 - 虽然我还没有尝试过。

这一招的其余部分...你仍然需要使用反正


  1. 全部移动控制到一个单一的UIView(在IB:全选,然后去布局>嵌入对象中。 ..>查看)

  2. 接管该单一的UIView使用一个IBOutlet属性的源代码(见下文)

  3. 源代码,而不是接口生成器(IB是打破了这里,它有错误,它错误地设置了UIScrollView的原点 - 它试图将视图居中。苹果从来没有打算检查它的基本错误,感叹):将单个UIView移动到UIScrollView(见下面的代码)。

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

代码(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

+0

该解决方案效果很好。感谢发布 – JoshHighland 2010-10-07 00:21:24

+0

这也适用于4.x - 我仍然在应用程序中使用它,没有任何问题。 – Adam 2010-10-23 17:00:44

+0

这适用于iOS 4.2上的iPhone。别忘了UIScrollView的高度应该与ViewController的顶级UIView相同或相等。我一直在摆弄设置,忘记把它改回来。感到困惑,因为它似乎仍然反弹到错误的位置。 – 2010-12-07 21:43:41

4

它很容易:

首先为您的视图添加一个滚动视图。 更改滚动视图的大小(例如,使其长700像素)。 开始放置您的控件 当您想要在较低(不可见)部件中放置/编辑控件时,请选择滚动视图并将Y开始位置更改为-300。 Voila。 编辑后将Y开始位置设回0或其它值。

+0

或者,您可以增加尺寸,然后再减小尺寸。滚动会很好,但我并不感到惊讶,它没有实现 – Casebash 2010-09-16 11:45:34

+0

如果你这样做,那么你还必须手动(重新)设置滚动视图的“框架”的大小为页面的视图大小(视图门户)和将“contentSize”设置为总内容大小。后者默认为0,0,如果contentSize不大于frame.size,则不会发生滚动。这是另外一个好策略,非常感谢! – 2012-03-16 18:19:50

1

虽然这个问题很老了,我会建议一个解决办法,我发现我有同样的问题,没能找到多少帮助那里:

当IB,如果你想将物体420像素之外,只要在选择所有状态栏,上栏,其中包含与所有对象滚动视图查看底部栏的未指定的肯定自己。这样,您就可以手动调整屏幕大小(对于视图)。然后,您可以按照调整滚动查看^h值,可以使用所有其他的对象,与他们一起工作Ximonn的意见,然后,撤消更改为^h值,然后设置需要的吧。

0

我一直在寻找这几天,我终于碰到这个网站来了,对我工作的解决方案。

Scrolling with UIScrollView

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

1

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

subview.userInteractionEnabled = NO; 

否则这个子视图将叠加在屏幕上没有任何影响。

0

我知道,这个线程是一个年纪大一点......但有人能找到它的谷歌,它的HIGHT排名。 我写了这个小辅助方法来完成这项工作:

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

你只需要在标题中声明两个IBOutlet中的(例如,contentViewscrollView),并调用这样的方法,等。无论您想加载UIView与你的源代码一个UIScrollView

[self addSubview:contentView toScrollView:scrollView];

我把它叫做在viewDidLoad中

这种方法功能的iOS

4

我不知道,如果这只是我,但我试图按照每个这里的其他答案的指示,没有一次成功。没有一个答案包含了所有需要的东西,我猜每个答案都假设我们知道要做一些事情,所以就把这一部分留下来。我终于想通了与red artisan.所以......我在这里上市的所有必要的步骤获得的帮助这项工作:

  1. InterfaceBuilder下,添加一个视图,然后添加你控制它(或如果您的控件已经存在于主视图中,则可以选择所有控件,然后转到编辑器|嵌入|视图,然后拖动该新视图,使其全部位于主视图之外)。此视图可以是任何你喜欢的尺寸。

  2. 在InterfaceBuilder中,将一个滚动视图添加到您的主视图中,并调整它以占据整个主视图。

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

  4. 在InterfaceBuilder中,将包含控件的视图挂接到文件所有者中的'contentView'。将Scroll View连接到文件所有者的'scrollView'。

头文件:

 
    @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]; 
    } 
0

选择的答案很适合的Xcode 3

然而,Xcode的4,菜单已被重新稍微安排一下。

要做到在Xcode 4的相同选择你的意见,然后使用:

编辑>嵌入>滚动查看

相关问题