无法在 UIScrollView 和 AutoLayout 中使用 AspectFill 滚动 UIImageView
Posted
技术标签:
【中文标题】无法在 UIScrollView 和 AutoLayout 中使用 AspectFill 滚动 UIImageView【英文标题】:Can't scroll UIImageView with AspectFill in UIScrollView and AutoLayout 【发布时间】:2015-07-08 15:01:30 【问题描述】:我有一个带有单个 UIImageView 子的 UIScrollView。滚动视图通过自动布局固定在(根)父容器的所有侧面,子图像视图也固定在内容模式设置为AspectFill
的所有侧面。
UIImage *image = [UIImage imageNamed:@"photo1.jpeg"];
_imageView.image = image;
_imageView.contentMode = UIViewContentModeScaleAspectFill;
_scrollView.contentOffset = CGPointZero;
_scrollView.contentSize = _imageView.image.size;
_scrollView.zoomScale = 1;
这种情况下的图像比我的屏幕宽。当我启动我的应用程序时,imageview 正确显示了填满屏幕的图像。但是,我似乎无法向左或向右平移图像。当我放大时,我可以平移,但是,我无法平移到图像的角落。
由于自动布局,我觉得我的内容大小没有被正确计算,但我不确定我可以播放哪些参数来让我将图像滚动到边缘。
我在下面附上了一张图片,您可以在其中看到图片无法以显示“幸福”开头的方式滚动。我还上传了样本here
【问题讨论】:
【参考方案1】:子图像视图也固定在所有边上
相反,为子图像视图关闭自动布局(将其 translates...
设置为 YES)。您已经将滚动视图的 contentSize
设置为图像大小,因此现在可滚动性将跃跃欲试,并与缩放正确交互。
【讨论】:
感谢马特的帮助。我刚刚尝试了您提到的内容,突然约束解析器吓坏了,说它无法满足同时约束。此外,它会导致我的 uiimageview 无法填满滚动视图。我上传了样本here。因此,尽管通过您的更改,我确实可以滚动到图像的末尾,但图像视图不再填充滚动视图。 另外,马特,如果我不设置 contentSize,有没有办法解决这个问题? "所以虽然有了你的改变,我确实可以滚动到图像的末尾,图像视图不再填满滚动视图" 哦,当然;在没有自动布局的情况下,您必须自己设置图像视图的大小。当然,您必须删除所有影响图像视图的约束(如果您不能直接删除它们,请将它们设置为笔尖中的占位符)。但这正是我建议你做的。 — 如果您自己无法解决问题,我很乐意 fork 和 pull-request 您的 github 项目,但首先让我给您一个机会,看看我的建议是否有意义。 "另外,马特,如果我不设置 contentSize,有没有办法解决这个问题" 您要的是纯自动布局解决方案吗?我发现单独的图像视图不起作用。您需要一个围绕它的内容视图。有关示例,请参见 github.com/mattneub/Programming-ios-Book-Examples/tree/master/…。 谢谢马特。我完全从我的 uiimageview 中删除了约束,将translates...
设置为 YES
,并将 uiimageview 的框架设置为特定的东西,这似乎对我有用。我可以从您的帮助中理解关闭自动布局有助于我的事业,但是有没有办法合理化为什么我无法滚动到我的图像视图的开头?我在想这一切都错了吗?我希望我能理解为什么对我最初的问题应用“AspectFill”会阻止我滚动到图像的边缘?以上是关于无法在 UIScrollView 和 AutoLayout 中使用 AspectFill 滚动 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章
无法在 UIScrollView 和 AutoLayout 中使用 AspectFill 滚动 UIImageView
无法使用 UIScrollView 和 pagingEnabled=YES 禁用反弹
无法滚动 UITableViewCell 中的 UIScrollView 和 UITableView 本身