为什么iOS 13放弃了我的布局限制更改



我有一个表视图,它的单元格配置了自动布局约束,以根据其内容处理几个略有不同的布局。我通过在要激活或停用的约束上设置active属性来进行更改。在我将应用程序放在后台并返回到它之前,这一切都很好。当我这样做时,我的更改似乎丢失了,单元格的布局约束返回到它们最初在nib文件中的状态。

这只会在使用Xcode 11构建的iOS 13上运行时发生。如果我在iOS 12上运行Xcode 10.3或Xcode 11版本,我看不到这个问题。如果我在iOS 13上运行Xcode 10.3版本,我看不到这个问题。

我曾尝试在-[NSLayoutConstraint setActive:]处放置一个符号断点,但在将应用程序放入后台或返回前台时,它不会被击中。

其他人遇到过这样的问题吗?有什么提示吗?谢谢

编辑:演示此问题的小型项目位于https://github.com/cooksey/CellLayout

启动应用程序,它应该显示一个在图像旁边带有标签的表视图。将应用程序留在主屏幕,然后返回应用程序,此时标签与图像重叠。

问题是在Cellxib中,您取消选中图像对齐标签约束的Installed复选框。但这正是你希望保持激活状态的制约因素。

(然而,这只是症状。真正的问题是,你的目标是交换约束,但你做得不对。你试图从xib文件中的两个约束集开始。不。您从xib文件中的一个集合开始,然后在代码中创建另一个集合。保留对这两个集合的强引用。现在,交换它们是微不足道的。注意:在交换过程中,总是先删除再添加,否则会发生冲突。(

我也遇到了同样的问题。我改变了方法,从两个约束激活/停用其中一个约束,只保留一个约束并更新常数值以实现我想要的。

最新更新