如何使用主 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iphone 中刷新 UITableView?

iPhone:如何使用 UI 图形 PushContext

Xcode 版本为 9,iOS11 并且除了 iPhone x 之外工作正常。 UI 崩溃了

iPhone - 自动化测试?

iPhone UITableView 从平面数组填充可变行部分

在 iPhone 上显示多个图像缩略图时 UI 失真