我有我的所有控件在界面生成器(许多标签,按钮等)布局。我如何将它们全部放入界面生成器的滚动视图中,以便我可以获得更多空间并能够上下滚动以显示更多控件?我必须以编程方式执行此操作吗?如何将UIScrollView添加到Interface Builder?
回答
打开包含所有控件和标签等的视图(在Interface Builder中)。全选。然后在编辑器菜单下,选择嵌入,然后选择滚动视图。
注意:在旧的Xcode版本中,这是在布局菜单下,然后嵌入对象...(滚动视图)。
选择您想要放入滚动视图中的所有对象并转到布局菜单,选择“嵌入对象”并选择“滚动视图”。
我首选的方案,在这里你不需要硬编码的contentSize的大小:
注意:您可能能够避免这种源代码部分使用这里的伎俩:https://stackoverflow.com/a/11239123/153422 - 虽然我还没有尝试过。
这一招的其余部分...你仍然需要使用反正
全部移动控制到一个单一的UIView(在IB:全选,然后去布局>嵌入对象中。 ..>查看)
接管该单一的UIView使用一个IBOutlet属性的源代码(见下文)
源代码,而不是接口生成器(IB是打破了这里,它有错误,它错误地设置了UIScrollView的原点 - 它试图将视图居中。苹果从来没有打算检查它的基本错误,感叹):将单个UIView移动到UIScrollView(见下面的代码)。
使用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
该解决方案效果很好。感谢发布 – JoshHighland 2010-10-07 00:21:24
这也适用于4.x - 我仍然在应用程序中使用它,没有任何问题。 – Adam 2010-10-23 17:00:44
这适用于iOS 4.2上的iPhone。别忘了UIScrollView的高度应该与ViewController的顶级UIView相同或相等。我一直在摆弄设置,忘记把它改回来。感到困惑,因为它似乎仍然反弹到错误的位置。 – 2010-12-07 21:43:41
它很容易:
首先为您的视图添加一个滚动视图。 更改滚动视图的大小(例如,使其长700像素)。 开始放置您的控件 当您想要在较低(不可见)部件中放置/编辑控件时,请选择滚动视图并将Y开始位置更改为-300。 Voila。 编辑后将Y开始位置设回0或其它值。
或者,您可以增加尺寸,然后再减小尺寸。滚动会很好,但我并不感到惊讶,它没有实现 – Casebash 2010-09-16 11:45:34
如果你这样做,那么你还必须手动(重新)设置滚动视图的“框架”的大小为页面的视图大小(视图门户)和将“contentSize”设置为总内容大小。后者默认为0,0,如果contentSize不大于frame.size,则不会发生滚动。这是另外一个好策略,非常感谢! – 2012-03-16 18:19:50
虽然这个问题很老了,我会建议一个解决办法,我发现我有同样的问题,没能找到多少帮助那里:
当IB,如果你想将物体420像素之外,只要在选择所有状态栏,上栏,其中包含与所有对象滚动视图查看底部栏的未指定的肯定自己。这样,您就可以手动调整屏幕大小(对于视图)。然后,您可以按照调整滚动查看^h值,可以使用所有其他的对象,与他们一起工作Ximonn的意见,然后,撤消更改为^h值,然后设置需要的吧。
我一直在寻找这几天,我终于碰到这个网站来了,对我工作的解决方案。
基本上你有你在这一个UIScrollView客体主视图。然后是另一个内容视图,其中包含您的所有内容。然后将内容视图添加到滚动视图。然后最后将滚动视图的内容大小设置为内容视图的大小。
重要的小东西。 要在UIScrollView中滚动大的子视图(例如UIImageView),请记住,对于此子视图,取消选中InterfaceBuilder - > View窗口中的“User Interaction Enabled”复选框。或者以编程方式进行。
subview.userInteractionEnabled = NO;
否则这个子视图将叠加在屏幕上没有任何影响。
我知道,这个线程是一个年纪大一点......但有人能找到它的谷歌,它的HIGHT排名。 我写了这个小辅助方法来完成这项工作:
- (void)addSubview:(UIView *)theSubView toScrollView:(UIScrollView *)theScrollView
{
[theScrollView addSubview:theSubView];
theScrollView.contentSize = theSubView.bounds.size;
}
你只需要在标题中声明两个IBOutlet中的(例如,contentView
和scrollView
),并调用这样的方法,等。无论您想加载UIView
与你的源代码一个UIScrollView
:
[self addSubview:contentView toScrollView:scrollView];
我把它叫做在viewDidLoad中
这种方法功能的iOS
我不知道,如果这只是我,但我试图按照每个这里的其他答案的指示,没有一次成功。没有一个答案包含了所有需要的东西,我猜每个答案都假设我们知道要做一些事情,所以就把这一部分留下来。我终于想通了与red artisan.所以......我在这里上市的所有必要的步骤获得的帮助这项工作:
InterfaceBuilder下,添加一个视图,然后添加你控制它(或如果您的控件已经存在于主视图中,则可以选择所有控件,然后转到编辑器|嵌入|视图,然后拖动该新视图,使其全部位于主视图之外)。此视图可以是任何你喜欢的尺寸。
在InterfaceBuilder中,将一个滚动视图添加到您的主视图中,并调整它以占据整个主视图。
将下面列出的代码添加到您的UIViewController标题和类文件中。
在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]; }
选择的答案很适合的Xcode 3
然而,Xcode的4,菜单已被重新稍微安排一下。
要做到在Xcode 4的相同选择你的意见,然后使用:
编辑>嵌入>滚动查看
- 1. 如何使用Interface Builder将UIBarButtonItems添加到UIViewController.toolbarItems属性?
- 2. 如何将控件添加到Interface Builder Gallery?
- 3. 通过Interface Builder在UITextView中添加'...'
- 4. 如何将UIControls添加到UIScrollView contentView?
- 5. 如何将UIScrollView添加到UIAlertView
- 6. 如何使用Interface Builder添加导航控制器?
- 7. 如何在Interface Builder中向NSMenu添加额外的项目?
- 8. 如何使用Interface Builder在UIButton或UIBarButtonItem上添加BgImage?
- 9. 如何添加在Interface Builder对象原型细胞
- 10. UIView的子类。如何通过Interface Builder添加?
- 11. 将UIRefreshControl添加到UIScrollView
- 12. 将UIImageView添加到UIScrollView
- 13. 将Stackview添加到UIScrollView
- 14. 将按钮添加到UIScrollview
- 15. 将UIImageView添加到UIScrollView
- 16. 将tapRecognizer添加到UIScrollView
- 17. 如何设置UIScrollView的子类,并在Interface Builder中将其连接起来
- 18. 将MKMapView拖放到Interface Builder中
- 19. 如何使用Interface Builder和Storyboared从附加到UITabBarControLler
- 20. Interface Builder错误?
- 21. Interface Builder + Sprite Strips
- 22. 与Interface Builder中
- 23. Interface Builder缩放?
- 24. 如何将UIView子类拖到Interface Builder中?
- 25. 有没有办法将Interface Builder选项添加到自定义类中?
- 26. XCode-是否可以在Interface Builder中将列和图像添加到PickerView?
- 27. 我可以使用Interface Builder将nib内容加载到UIView吗?
- 28. 添加IBActions到UIScrollView
- 29. 如何将Web Interface添加到C#Windows应用程序
- 30. 为UIScrollView的约束误差在Interface Builder空UIStackView
马克·w ^打我给它。 – mahboudz 2009-10-05 17:32:20
这不符合预期。现在一切都在UIScrollView下,但是当我加载应用程序时,没有什么可滚动的。为什么? – erotsppa 2009-10-06 02:33:01
在IB中,请确保滚动视图足够小,以便在应用运行时,视图中可以看到整个视图。换句话说,它的边界/框架需要小于或等于它所在的视图。 然后,在您的应用程序中,您需要使用所有按钮,标签等设置视图的scrollview.contentSize =大小。这将比您为滚动视图设置的框架/边界更大。 如果一切正常,那么你应该可以在没有其他工作的情况下进行滚动。 – mahboudz 2009-10-06 03:20:05