我正在我的 iPhone 应用程序中构建一个数据输入表单,并且有比屏幕上显示的更多的数据字段。我想我应该将它们放入 UIScrollView 中,以便用户可以滚动浏览表单。在 Interface Builder 中构建它的最佳方法是什么?我知道我可以以编程方式完成,但如果可以的话,我想在 Interface Builder 中完成。问题是,如果 UILabels、UITextFields 等不在 iPhone 主屏幕之外——在 UIScrollView 变得有用的屏幕部分,我该如何布置它们?
7 回答
我为这个问题找到的最好的解决方法(我认为这对 Interface Builder 来说很尴尬)是这样的:
- 在 UIScrollView 中放置一个“容器”UIView,使用检查器将容器 UIView 的大小设置为所需的大小(例如 320 x 1200),然后在该容器视图中添加您的内容。(您的按钮、文本字段等)。
- 在代码中将 UIScrollView 的 contentSize 设置为与容器 UIView 的大小相同。例如在 viewDidLoad 的某个地方(例如 scrollView.contentSize = containerView.frame.size;)
- 要在 Interface Builder 中修改超出滚动视图范围的内容,您必须每次将容器视图拖到滚动视图之外,进行修改,然后将容器视图拖回 UIScrollView 内并构建。
这实际上很简单:
创建一个新的视图控制器类,例如 MyScrollViewController
创建一个以 UIScrollView 作为最顶层视图的新 xib,并将 File's Owner 的类设置为 MyScrollView Controller
将 File's Owner 的 view 属性设置为滚动视图
拖动滚动视图的底部以创建所需的大小。
将您的各种其他 UI 元素定位为滚动视图的子视图
在 MyScrollViewController.h 中为滚动视图创建并连接一个 IBOutlet,例如
@property (retain, nonatomic) IBOutlet UIScrollView *scrollView;
在 MyScrollViewController 的 viewDidLoad 方法中,添加以下代码行:
self.scrollView.contentSize = self.scrollView.frame.size;
就是这样的人!
在“Size inspector”上设置“Scroll View Size”的“Content Insets”:Bottom = YourFrameHeight - ScreenHeight。它将允许您在 UIScrollView 的从上到下、从下到下的范围内滚动
在 IB 中双击打开UIScrollView
自身,并将大小增加到您需要的大小或更大(您可以随时在运行时缩小)。然后只需添加元素。
编辑:不起作用 - 请参阅此处。
我也有同样的问题。我最终做的是在其中放置另一个 UIView 并将高度设置为我想要的任何值。然后我把我所有的 UI 元素都放在里面。这允许您上下拖动内部视图。
在 xCode5(没有故事板,使用自动布局)中对我有用的是使用 7 步答案,上面写着“这就是所有人!” 并添加两个步骤。
8) 将一个新的 UIView 拖到界面生成器中。不进入滚动视图。就靠它自己。将您所有的控件/视图放入其中,并使其尽可能大。我将此视图连接为 contentView。
@property (weak, nonatomic) IBOutlet UIView *contentView;
9) 然后在 - (void)viewDidLoad
[self.mainScrollView addSubview:self.contentView]; [self.mainScrollView setContentSize:CGSizeMake(self.contentView.frame.size.width,self.contentView.frame.size.height)];
只是说这对我有用。
这一切终于有了一个明智的解决方案,那就是在 UIScrollView 中放置一个 Container View。由于 Interface Builder 分别在 Container View 中显示 UIViewController,您终于可以看到您的 UIScrollView 内容会是什么样子,而无需交叉手指并站在头上。
您仍然需要以编程方式设置内容大小,但至少您现在可以可视化它正在发生的事情。