如何使用主 iPhone 视图之外的 UI 元素在 Interface Builder 中设置 UIScrollView?
Posted
技术标签:
【中文标题】如何使用主 iPhone 视图之外的 UI 元素在 Interface Builder 中设置 UIScrollView?【英文标题】:How to set up UIScrollView in Interface Builder with UI elements outside the main iPhone view? 【发布时间】:2010-08-11 13:45:09 【问题描述】:我正在我的 iPhone 应用程序中构建一个数据输入表单,但数据字段超出了屏幕的显示范围。我想我应该将它们放入 UIScrollView 中,以便用户可以滚动浏览表单。在 Interface Builder 中构建它的最佳方法是什么?我知道我可以以编程方式完成,但如果可以的话,我想在 Interface Builder 中完成。问题是,如果 UILabel、UITextField 等不在 iPhone 主屏幕之外——在 UIScrollView 对其有用的屏幕部分,我该如何布置它们?
【问题讨论】:
【参考方案1】:我为这个问题找到的最佳解决方法(我认为这对 Interface Builder 来说很尴尬)是这样的:
-
在 UIScrollView 中放置一个“容器”UIView,使用检查器将容器 UIView 的大小设置为所需的大小(例如 320 x 1200),然后在该容器视图中添加您的内容。 (您的按钮、文本字段等)。
在代码中将 UIScrollView 的 contentSize 设置为与容器 UIView 的大小相同。例如在 viewDidLoad 中的某处(例如 scrollView.contentSize = containerView.frame.size;)
要在 Interface Builder 中修改超出滚动视图范围的内容,您必须每次将容器视图拖到滚动视图之外,进行修改,然后将容器视图拖回 UIScrollView 内并构建。
【讨论】:
这回答了我的问题。您不能将子视图直接放在 UIScrollView 下方。您需要在 UIScrollView 中有一个 UIView 作为所有子视图的容器(我知道这有点愚蠢)。 这种方法为我省去了很多麻烦。主要课程 -> 如果您打算使用 xib 界面来设计滚动视图的内容,最好在单独的 uiview 中进行,然后以编程方式将其作为一个整体添加到您的滚动视图中,然后设置您的 contentsize。【参考方案2】:这其实很简单:
创建一个新的视图控制器类,例如我的滚动视图控制器
新建一个以 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;
这-th-th-这就是所有人!
【讨论】:
这在纵向模式下对我有用,但在我将其旋转到横向时却不行。我改用这条线 self.scrollView.contentSize = CGSizeMake(self.view.bounds.size.width, 600.0f);高度略大于滚动视图中的内容。【参考方案3】:在“Size inspector”上设置“Scroll View Size”的“Content Insets”:Bottom = YourFrameHeight - ScreenHeight。它将允许您在 UIScrollView 的从上到下、从下到下的范围内滚动
【讨论】:
【参考方案4】:在 IB 中双击打开 UIScrollView
本身,并将大小增加到您需要的大小或更大(您始终可以在运行时缩小)。然后只需添加元素。
编辑: 不起作用 - 请参阅 here。
【讨论】:
【参考方案5】:我也遇到了同样的问题。我最终做的是在其中放置另一个 UIView 并将高度设置为我想要的任何值。然后我把我所有的 UI 元素都放在里面。这允许您上下拖动内部视图。
【讨论】:
【参考方案6】:在 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)];
只是说这对我有用。
【讨论】:
【参考方案7】:这一切终于有了一个明智的解决方案,那就是在 UIScrollView 中放置一个 Container View。由于 Interface Builder 在 Container View 中单独显示 UIViewController,您终于可以看到您的 UIScrollView 内容将是什么样子,而无需交叉手指并站在头上。
您仍然需要以编程方式设置内容大小,但至少您现在可以直观地看到它正在发生的事情。
【讨论】:
以上是关于如何使用主 iPhone 视图之外的 UI 元素在 Interface Builder 中设置 UIScrollView?的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 版本为 9,iOS11 并且除了 iPhone x 之外工作正常。 UI 崩溃了