swift - 使用滚动视图在 Xcode 11 中缩放图像,避免“不明确的内容大小”自动布局错误
问题描述
我的问题是关于滚动视图的自动布局问题。
我只是想在故事板上添加一个滚动视图,它对超级视图有自己的约束,但里面没有任何子视图,一旦应用程序运行,就在其中添加一个 imageView。但是由于情节提要上的“内容大小不明确”错误,即使我们取消选中“检查歧义”选项,autoLayout 也无法在 scrollView 上工作。如果我应用将 contentView 添加到 scrollView 的解决方案,并用所有这些额外的约束固定它,我仍然可以在 scrollView 内捏和缩放图像,但失去了平移的能力,无论 viewForZoom 是 contentView 还是添加了图像视图。如果 ContentView 是 imageView 我有同样的问题。可以缩放,不能平移。
另外,任何人都可以向我解释为什么当 ScrollView 没有内容时,在这个 Xcode 版本中会触发这种荒谬的“模棱两可的责骂内容错误”?为什么我们需要将一个带有两个冗余约束的 contentView 固定到 scrollView 的 superview 上?
解决方案
Interface Builder / Storyboard 无法知道您将在运行时添加子视图和约束。
因此,它告诉您当前布局的内容大小不明确。
如果滚动视图没有内容,不显示消息会更好吗?也许......但即使它显示设计错误,这并不意味着您必须修复它。
如果您真的想摆脱警告/错误,有几个选项:
1)在 Storyboard 中添加您的 imageView(具有适当的约束),并.image
在运行时设置属性。
2)在 Storyboard 中添加一个子视图(具有适当的约束),并viewdidLoad()
在添加 imageView 之前删除该视图。
编辑
这是一个简单的例子:https ://github.com/DonMag/ZoomTest
在 IB / Storyboard 中,我添加了一个UIScrollView
并只设置了宽度、高度、centerX 和 centerY 约束,所以 Storyboard 告诉我Ambiguous Content Size。
在viewDidLoad
中,我添加了一个UIImageView
,设置适当的约束,设置滚动视图委托和最小/最大缩放比例。
编辑 2
结果使用256 x 256
图像,并约束滚动视图以填充父视图(滚动视图背景为青色)...
加载时 - zoomScale == 1:
加载时 - zoomScale == 1 - 旋转:
zoomScale = 大约 1.5(刚好适合):
zoomScale = 大约 1.5 - 旋转后:
zoomScale == 5 - 平移到左上角:
zoomScale == 5 - 平移到左上角 - 旋转后:
zoomScale == 5 - 平移到右下方:
zoomScale == 5 - 平移到右下方 - 旋转后:
推荐阅读
- monitoring - 通过灯塔分数以自动方式监控网站页面
- python-3.x - TypeError: get_object() 接受 1 个位置参数,但给出了 2 个
- java - 如何使用 Junit5 为每个测试使用单独的类加载器
- react-native - 反应原生滑块>无法通过点击多个滑块来获取位置值
- ms-access - 如何以连续形式操作单个记录
- java - Java 中的 3 位小数精度
- docker - 如何在 Docker 上运行灭霸?
- spring - @Autowireing 服务提供 NullPointerException
- android - 安装应用程序后在 android studio 中启动活动时出错
- php - 返回laravel中的所有关系数据