我在界面构建器中放置了所有的控件(许多标签、按钮等),我如何在界面构建器中将它们全部放入滚动视图中,以便我可以获得更多空间,并能够上下滚动以显示更多的控件?我是否必须通过编程来实现此功能?
我在界面构建器中放置了所有的控件(许多标签、按钮等),我如何在界面构建器中将它们全部放入滚动视图中,以便我可以获得更多空间,并能够上下滚动以显示更多的控件?我是否必须通过编程来实现此功能?
打开视图编辑器,在其中选择所有控件和标签等内容。然后在“编辑”菜单下,选择“嵌入”,然后选择“滚动视图”。
注意:在较旧的Xcode版本中,该选项位于“布局”菜单下,然后选择“嵌入对象...(滚动视图)”。
我推荐的解决方案,其中您不需要硬编码contentSize的大小:
注意:您可以使用此方法避免此处的源代码部分:https://dev59.com/G3NA5IYBdhLWcg3wAItP#11239123 - 尽管我尚未尝试过。
其余的技巧...仍然需要使用
将所有控件移动到单个UIView中(在IB中:选择所有控件,然后转到Layout> Embed Objects In ...> View)
使用IBOutlet属性将该单个UIView连接到源代码(请参见下文)
在源代码中而不是界面构建器(IB在这里有问题,它设置UIScrollView的原点位置不正确-它试图居中视图。Apple从未检查过它是否存在基本错误,叹气):将单个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
虽然我最近没有检查过,但我记得它适用于2.x和3.x
sizeThatFits
是没有意义的。将滚动视图的contentSize
设置为主视图的大小就足够了。 - mattUIView
并将其添加到 UIScrollView
中(尽管我花了很多时间试图将所有内容放入一个过大的 UIScrollView
中),但我从未想过使用 sizeThatFits:
方法!太棒了! - msgambel很简单:
首先在您的视图中添加一个滚动视图。 更改滚动视图的大小(例如,使其长700像素)。 开始放置您的控件。 当您想要在下部(不可见)部分放置/编辑控件时,请选择滚动视图并将Y起始位置更改为-300。 完成! 编辑后将Y起始位置设置回0或任何其他值。
不知道是不是只有我一个人,但我尝试跟着其他答案中的每一个指示去操作,但都没有成功。每个答案都没有包含所需的全部内容,可能是假设我们知道该怎么做而省略了那一部分。最终,在red artisan的帮助下,我弄清楚了该如何实现:
在InterfaceBuilder中添加一个View,然后向其中添加控件(或者如果你的控件已经存在于主视图中,可以选择所有的控件,然后转到Editor | Embed In | View,再将该新的View拖动到它自己以外的位置)。这个View可以是任意大小。
在InterfaceBuilder中,向主视图添加一个滚动视图,并将其大小调整为占用整个主视图。
将以下代码添加到您的UIViewController Header和Class文件中。
在InterfaceBuilder中,将包含控件的View连接到File's Owner中的'contentView'。将滚动视图连接到File's Owner中的‘scrollView’。
Header 文件:
@interface MyViewController : UIViewController @property(nonatomic, retain) IBOutlet UIScrollView *scrollView; @property(nonatomic, retain) IBOutlet UIView *contentView;
Class 文件:
@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]; }
选择您想要放入滚动视图中的所有对象,然后转到布局菜单,选择“嵌入对象”并选择“滚动视图”。
重要的小事情。 如果需要在UIScrollView中滚动大的子视图(例如UIImageView),请记住,在Interface Builder的视图窗口中,对于这个子视图,取消选中“用户交互启用”复选框。或者可以通过编程方式实现。
subview.userInteractionEnabled = NO;
尽管这个问题非常老,我想提供一个解决方法,因为我也遇到了同样的问题并找不到太多帮助:
在IB中,如果您想将对象放置在420像素之外,请确保对包含滚动视图和所有对象的视图的状态栏、顶部栏和底部栏都选择了未指定。这样,您就可以手动调整屏幕大小(对于视图)。然后,您可以按照Ximonn的建议调整滚动视图的H值,并访问所有其他对象,在与它们一起工作后撤销H值的更改,然后设置所需的栏。
我知道,这个帖子有点旧了...但是有人可能在谷歌上找到它,因为它排名很高。 我编写了这个小助手方法来完成工作:
- (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
我已经寻找了几天,最终在这个网站上找到了一个对我有用的解决方案。
基本上,你需要在主视图中添加一个UIScrollView对象,然后再添加另一个包含所有内容的内容视图。接着将内容视图添加到滚动视图中,并将滚动视图的内容大小设置为内容视图的大小。
对于Xcode 3,所选答案效果良好。
然而,对于Xcode 4,菜单略有重新排列。
要在Xcode 4中执行相同操作,请选择您的视图,然后使用:
编辑器 > 嵌入 > 滚动视图