我有矩形内容。它通常适合于320x361:竖屏模式减去状态栏减去广告栏减去标签栏。
我将该内容放入UIScrollView并启用了缩放。我还希望界面旋转可以正常工作。内容始终是一个高矩形,但在缩放时,用户可能希望同时看到更多的宽度和较少的高度。
在Interface Builder和代码中我需要做什么来完成此操作?我应该如何设置不同视图的自动调整大小?如何设置我的contentSize和contentInsets?
我已经尝试了很多种不同的方法,但没有一种方法完全正确。在我的各种解决方案中,我遇到了问题,在某些缩放、界面旋转和滚动的组合后,不再可能将整个内容滚动到屏幕上。在您看到内容的边缘之前,滚动视图会将您弹回。
我现在的做法大约有80%的正确性。也就是说,它应该做10件事情中的8件。它做错的两件事是:
1. 在竖屏模式下缩放时,您可以滚动超过内容的边缘,并看到黑色背景。这也不是太值得抱怨。至少您可以看到所有的内容。在横向模式下,无论是否缩放,看到边缘之外的黑色背景都是正常的,因为内容在1:1缩放级别(最小)下没有足够的宽度来填满屏幕。
2. 当它在运行iOS 3.0的测试设备上运行时,我仍然会遇到内容卡在边缘的情况,但它在我的4.x上运行良好。 - 实际上,这是在先前的解决方案中发生的。我的测试人员还没有尝试最新的解决方案。
这是我目前正在使用的解决方案。总结一下,我使滚动视图宽高适应于任何方向,因为我发现手动或自动调整大小会增加复杂性并变得脆弱。
视图层次结构:
- 视图 - 滚动视图 - 可滚动区域 - 内容 - 广告
视图大小为320x411,并具有所有自动调整大小选项,因此符合屏幕形状。
滚动视图为480 x 361,起始位置为-80,0,并锁定顶部,禁用拉伸。
可滚动区域为480 x 361,锁定左侧和顶部。由于滚动视图禁用了拉伸,其子视图的自动调整大小掩码并不重要,但我还是告诉你。
内容为320x361,起始位置为80,0,并锁定顶部。
我正在设置scrollView.contentSize为480x361。
shouldAutorotateToInterfaceOrientation
支持除了倒立的竖屏外的所有朝向。
在 didRotateFromInterfaceOrientation
方法中,如果方向是横向,则设置底部内容插入量为 160,否则重置为 0。如果方向是纵向,则将左右指示器插入量各设置为 80,否则重置。
scrollView.minimumZoomScale = 1.0
scrollView.maximumZoomScale = 2.0
viewForZoomingInScrollView返回可滚动区域
contentSize
应该是可滚动区域的框架。是的,我已经对其进行了子类化,因为我有一些石英渲染PDF。 - user207616