在保持子视图锚定的同时调整 UIView 宽度

Posted

技术标签:

【中文标题】在保持子视图锚定的同时调整 UIView 宽度【英文标题】:Resizing UIView width while keeping subview anchored 【发布时间】:2014-11-09 18:52:17 【问题描述】:

所以我想在前后实现这样的事情:

http://demosthenes.info/blog/819/A-Before-And-After-Image-Comparison-Slide-Control-in-html5

我目前有这个层次结构(按此顺序添加,我用 ID 标记了它们以便更容易理解):

UIView (1)
   UIImageView (2)
   UIView (3)
     UIImageView (4)

现在*** UIView 附加了一个 UIPanGestureRecognizer。我的想法是在识别到平移手势时调整包含 UIImageView 的第二个 UIView (3) 的大小。换句话说,我将移动 UIView (3) 的 x 位置,从而隐藏包含 UIImageView (4) 以显示其后面的图像 (2) 从而达到预期的效果。它工作得相当好,因为它确实调整了大小,但包含的 UIImageView (4) 没有调整大小,而是随着调整大小的 UIView (3) 的 x 位置移动(锚定在 (0,0))或者它只是漂浮在一切之上。我尝试更改 UIView (3) 和 autoresizeMask/contentMode 的 autoresizeSubviews,但没有任何效果。

换句话说,如何在不移动或调整子视图大小的情况下调整容器的大小?

我做错了什么?不确定这种方法是否是最好的。如果您对更好的前后处理方式有任何建议,请分享!

【问题讨论】:

【参考方案1】:

我会将您当前的结构更改为:

UI 视图 (1) UIImageView (2) UIImageView (3)

为了达到你想要的效果,放置一个布局约束,它附加在 UIImageView (3) 的右侧。使用 UIPanGestureRecognizer 修改约束。 此外,将界面生成器中的 UIImageView (2) 和 UIImageView (3) 的视图模式设置为“左上角”。这应该够了吧。那就是您正在修改 UIImageView (3) 的大小以显示图像。

【讨论】:

但这会使图像粘在 UIImageView 的“左上”侧,并且在调整视图大小时会沿 X 移动? 如果将约束添加到 UIImageView 的右侧并修改约束的常量(即最初较高的值 = 缩小的图像视图)则不会

以上是关于在保持子视图锚定的同时调整 UIView 宽度的主要内容,如果未能解决你的问题,请参考以下文章

根据子视图大小调整 XIB 中的 UIView 大小

基于子视图灵活调整UIView大小的可靠解决方案

如何在 Windows 窗体中调整列表控件的添加/删除大小以提供类似锚定的行为

UIView 元素布局约束

在不自动调整大小的情况下确定 UIView 容器大小

如何调整 UIView 的大小并强制其子视图调整大小