【发布时间】:2022-01-13 22:35:54
【问题描述】:
我在我的界面代码中使用了 100% 的编程约束。升级到 Xcode 13 和 iOS 15。收到大量关于约束的新执行警告,都说系统必须打破一些约束才能遵守其他约束。我已经好几年没有看到这样的警告了,也没有碰过我的约束代码。然而,彻底的测试表明我的代码继续正确运行。怎么了?
【问题讨论】:
标签: ios objective-c constraints
我在我的界面代码中使用了 100% 的编程约束。升级到 Xcode 13 和 iOS 15。收到大量关于约束的新执行警告,都说系统必须打破一些约束才能遵守其他约束。我已经好几年没有看到这样的警告了,也没有碰过我的约束代码。然而,彻底的测试表明我的代码继续正确运行。怎么了?
【问题讨论】:
标签: ios objective-c constraints
回答:我对 iOS 实际计算约束尺寸的时间有点漫不经心。我把我所有的编程接口声明放到一个方法中。在那个方法的底部,我早就有代码超越了界面布局,进入了 NavCon 的预备阶段。在这些 NavCon 声明中,我有如下几行:
self.view_D0_Tutorial.frame = self.view_CenterPane_D0_Tutorial.frame;
我在编写和调试这些行时注意到,使用调试器询问位置数据是什么,我得到的只是 CRect (0,0,0,0),但代码以某种方式完成了正确的事情。
嗯,在升级过程中,iOS 显然改变了他们做事的方式。作为回应,我必须做两件事。
(1) 将所有 NavCon 初步代码移动到一个新的单独方法中,并以 performSelector 和 0 延迟调用它。
(2) 将简单的框架分配改为更有限的分配:
self.view_D0_Tutorial.frame = CGRectMake(0, 0, self.view_CenterPane_D0_Tutorial.frame.size.width, self.view_CenterPane_D0_Tutorial.frame.size.height);;
组合使错误消息消失,我的代码继续正确运行!
【讨论】: