Ios 在超级视图边框更改后更新子视图的约束

Ios 在超级视图边框更改后更新子视图的约束,ios,objective-c,ios9,Ios,Objective C,Ios9,我有一个UIView子类(用于处理拖放),在界面构建中我添加了两个子视图:一个UIImageView和一个UILabel 两者都有限制: UIImageView边框与superview边框匹配,以填充所有可用空间UILabel垂直和水平居中 在这里您可以看到三个(superview背景为绿色) 当我在superview中设置帧更改的动画时,问题就出现了。superview看起来不错,但它的子视图变得疯狂 在这里你可以看到它(忽略棕色方块,从另一个角度看) 正如您所看到的,尽管我在每个子视图上

我有一个
UIView
子类(用于处理拖放),在界面构建中我添加了两个子视图:一个
UIImageView
和一个
UILabel

两者都有限制:

UIImageView
边框与superview边框匹配,以填充所有可用空间<代码>UILabel垂直和水平居中

在这里您可以看到三个(superview背景为绿色)

当我在superview中设置帧更改的动画时,问题就出现了。superview看起来不错,但它的子视图变得疯狂

在这里你可以看到它(忽略棕色方块,从另一个角度看)

正如您所看到的,尽管我在每个子视图上调用了
updateConstraint
,子视图还是从superview中“落下”

我知道将AutoLayout与setFrame混合使用是一种不好的做法,但这是我知道的唯一方法


谢谢

谢谢你的评论,我做了一些改变

1) 使用UIImageView更改superview(绿色)

2) 移除UILabel并使用CATextLayer放置文本,使用将文本垂直居中放置在UIImageView前面


现在它工作得很好。谢谢您的帮助。

为什么不删除superview并将UIImageView的背景设置为绿色?然后使用正确的contentmode来正确调整图像的大小,请参见以下问题:我尝试了,但无法将UILabel设置为UIImageView的子视图。另外,绿色只是暂时的。您是否可以包含源代码?您描述的行为是预期会发生的。需要考虑的几件事:您在运行时在控制台中是否收到任何警告?如果无法解决约束,则会销毁一些约束,并在日志中向您发出警报<代码>-updateConstraints不需要在子视图上调用,除非您正在实际修改它们。在你的情况下,这听起来没有必要。如何定位要拖动的视图?如果视图是使用约束定位的,但随后修改了帧,则可能会发生意外行为。使用“自动布局”来设置帧更改的动画是可能的:是否有任何理由不能对superview执行此操作?