使用 UIScrollView 和 setContentSize 时设置正确的大小

Posted

技术标签:

【中文标题】使用 UIScrollView 和 setContentSize 时设置正确的大小【英文标题】:Setting correct sizes when using UIScrollView and setContentSize 【发布时间】:2011-05-24 01:34:56 【问题描述】:

我只是想拥有比普通 iPhone 屏幕更多的控件。以在联系人应用程序中查看某人的联系信息为例。

看来我应该使用 UIScrollView 来实现这一点。

假设我需要大约 800 像素。所以在我的 NIB 中,我将 ScrollView 的 View 设置为 800 的高度。然后我在 Scroll View 下添加我的控件。

我建立连接,然后在 viewDidLoad 中,我照常进行:

[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake(320, 800)];

如果我在这种状态下构建和运行,它不会滚动。所以上网查了一下,有人说要设置这个比UIScrollView大。

我似乎无法找到有关如何实际计算 setContentSize 中的 800 的信息。只是猜测直到看起来正确吗?如果我将它设置为 801,我将永远看不到滚动视图底部的所有内容,如果我将其设置为 1000,我可以看到底部,但它并没有真正在底部结束。

我只希望如果用户向下滚动,它会正确地在底部结束。

这是如何计算的?还是我错过了什么?这似乎是一个相当普遍的用法,但还没有找到模拟这个简单示例的代码示例。

【问题讨论】:

【参考方案1】:

Scrollview 通过显示较小的区域来提供更大画布的视角,但允许您在画布上平移。现在,当您将滚动视图的框架大小和内容大小设置为相同时,目的就失败了。因此没有滚动。

当您在大小为 320x480 的窗口/视图上将滚动视图的框架定义为 320x800 时,部分视图会被剪掉。它不可见,但它在那里。你的内容也在那里。您需要做的是设置滚动视图以匹配窗口的大小,即 320x480。现在您可以滚动,因为透视图比画布小。

【讨论】:

是的,这就是我发帖后的结果。我将高度设置回 480,它工作得恰到好处。是通过代码设置画布大小的唯一方法吗?另外,在 IB 中,如何设计不可见的部分? 您可以展开滚动视图并在那里填充您的对象,但您需要在这些对象在滚动视图中可用之前以编程方式设置内容大小。

以上是关于使用 UIScrollView 和 setContentSize 时设置正确的大小的主要内容,如果未能解决你的问题,请参考以下文章

升级到 Jetpack Compose Alpha 12 会导致 setContent 出现错误

更改 UIAlertView 的背景颜色,我收到警告:未找到 -setContents 方法

Ueditor1.3.6 setContent的一个bug

Gui系统之View体系---View的setContent

Android jetpack compose NoSuchMethodError: No static method setContent

如何使在Swift中使用UIScrollView进行滚动和缩放