【发布时间】:2015-10-07 12:19:49
【问题描述】:
我有一个 UIView 子类(用于处理拖放),并且在 Interface Build 中我添加了两个子视图:UIImageView 和 UILabel。
两者都有约束:
UIImageView 边框匹配超级视图边框以填充所有可用空间。 UILabel 垂直和水平居中。
这里可以看到三个(superview背景是绿色的)。
当我在超级视图中为帧更改设置动画时,我的问题就出现了。 superview 看起来不错,但它的 subviews 变得疯狂。
在这里你可以看到(忽略棕色方块,从另一个角度)
如您所见,尽管我在每个子视图上都调用了updateConstraints,但子视图从父视图中“落下”。
我知道将 AutoLayout 与 setFrame 混合使用是一种不好的做法,但这是我知道的唯一方法。
谢谢
【问题讨论】:
-
为什么不移除superview并将UIImageView的背景设置为绿色?然后使用正确的contentmode正确调整图片大小,看这个问题:stackoverflow.com/questions/4895272/…
-
我试过了,但后来我无法将 UILabel 设置为 UIImageView 的子视图。此外,绿色只是暂时的。
-
是否可以包含您的源代码?您所描述的行为是预期会发生的。需要考虑的几件事:您是否在控制台运行时收到任何警告?如果约束无法解决,一些约束将被破坏,您将在日志中收到警报。
-updateConstraints不需要在子视图上调用,除非您实际修改它们。在您的情况下,这听起来没有必要。你是如何处理定位被拖动的视图的?如果视图是使用约束定位的,但随后您修改了框架,则可能会发生意外行为 -
可以使用自动布局来为帧更改设置动画:stackoverflow.com/questions/13296232 您有什么理由不能为超级视图执行此操作吗?
标签: ios objective-c ios9