首页 > 解决方案 > 使用滚动视图在 Xcode 11 中缩放图像,避免“不明确的内容大小”自动布局错误

问题描述

我的问题是关于滚动视图的自动布局问题。

我只是想在故事板上添加一个滚动视图,它对超级视图有自己的约束,但里面没有任何子视图,一旦应用程序运行,就在其中添加一个 imageView。但是由于情节提要上的“内容大小不明确”错误,即使我们取消选中“检查歧义”选项,autoLayout 也无法在 scrollView 上工作。如果我应用将 contentView 添加到 scrollView 的解决方案,并用所有这些额外的约束固定它,我仍然可以在 scrollView 内捏和缩放图像,但失去了平移的能力,无论 viewForZoom 是 contentView 还是添加了图像视图。如果 ContentView 是 imageView 我有同样的问题。可以缩放,不能平移。

另外,任何人都可以向我解释为什么当 ScrollView 没有内容时,在这个 Xcode 版本中会触发这种荒谬的“模棱两可的责骂内容错误”?为什么我们需要将一个带有两个冗余约束的 contentView 固定到 scrollView 的 superview 上?

标签: swiftimageautolayoutscrollviewzooming

解决方案


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 - 平移到右下方 - 旋转后:

在此处输入图像描述


推荐阅读