【发布时间】:2025-11-29 15:25:01
【问题描述】:
这应该是很常见的事情,但我无法让它完全正确地工作。
我有矩形内容。它通常适合 320x361:纵向模式减去状态栏减去广告减去标签栏。
我已将该内容放入 UIScrollView 并启用缩放。我也希望界面旋转工作。内容将始终是一个高矩形,但在缩放时,用户可能希望一次看到更大的宽度和更少的高度。
我需要在 Interface Builder 和代码中做什么才能完成这项工作?我应该如何在不同的视图上设置我的自动调整大小?如何设置我的 contentSize 和 contentInsets?
我尝试了很多不同的方法,但没有一个是完全正确的。在我的各种解决方案中,我遇到了一些缩放、界面旋转和滚动组合的问题,它不再可能滚动到屏幕上的整个内容。在您看到内容的边缘之前,滚动视图会弹回来。
我现在的做法是正确的大约 80%。也就是说,在它应该做的 10 件事中,它做了 8 件事。它做错的两件事是:
在纵向模式下放大时,您可以滚动到内容的边缘,然后看到黑色背景。这没什么好抱怨的。至少你可以看到所有的内容。在横向模式下,无论是否缩放,看到超出边缘的黑色背景都是正常的,因为内容没有足够的宽度以 1:1 缩放级别(最小值)填充屏幕。
在运行 iOS 3.0 的测试设备上运行时,我的内容仍然卡在边缘,但它在运行 4.x 的我的设备上运行。 - 实际上,这是与以前的解决方案。我的测试人员没有尝试过最新的解决方案。
这是我目前正在使用的解决方案。总而言之,我已将滚动视图设置为任意方向所需的宽度和高度,因为我发现手动或自动调整它的大小会增加复杂性并且很脆弱。
查看层次结构:
- 查看
- 滚动查看
- 可滚动区域
- 内容
- 可滚动区域
- 广告
- 滚动查看
视图是 320x411 并且有所有的自动调整大小选项,所以符合屏幕形状
scrollView 为 480 x 361,从原点 -80,0 开始,仅锁定到顶部并禁用拉伸
scrollableArea 为 480 x 361,并锁定在左侧和顶部。由于 scrollView 禁用了拉伸,其子视图的自动调整大小掩码无关紧要,但我还是告诉你。
内容为 320x361,从原点 80,0 开始,并锁定到顶部
我将 scrollView.contentSize 设置为 480x361。
shouldAutorotateToInterfaceOrientation 支持除纵向倒置以外的所有方向。
在 didRotateFromInterfaceOrientation 中,如果方向是横向,我将底部内容插入设置为 160,否则重置为 0。如果方向是纵向,我将左右 indicator 设置为 80,如果不是,则重置。
scrollView.minimumZoomScale = 1.0
scrollView.maximumZoomScale = 2.0
viewForZoomingInScrollView 返回可滚动区域
【问题讨论】:
标签: iphone uiscrollview zooming landscape autoresize