故事板中的每个视图控制器都有“模拟指标”,您可以在属性检查器中看到:
其中一些指标是推断的(因此,推断指标)。
正如@thesystem 所提到的,如果给定的视图控制器是多个转场的目的地,则转场的源视图控制器的模拟指标之间可能存在差异。为了解决这些差异,IB 在解析目标视图控制器的推断指标时选择了一个 segue 来打破平局。
@rick-pastoor 的结论是删除整个inferredMetricsTieBreakers
部分是安全的,这是正确的,因为 IB 可以选择不同的打破平局的 segues。但是,不能保证新的决胜局会在 IB 中产生相同的布局结果。*
例如,我遇到过这样一种情况,根据决胜局的转场,在 IB 中显示的视图控制器有或没有状态栏。在这两种情况下,它的视图都保持了 568pts 的高度,因此顶部布局指南的位置不断变化。这滚雪球般地导致对受限于顶部布局指南的视图框架进行其他不希望的(并且在很大程度上无意义的)更改。
基于这些观察,不建议同时选择新旧推断指标集。相反,删除这两个集合,然后在 IB 中打开故事板,以便在提交合并之前打破联系。为避免由于打破平局的变化而导致不希望的帧更改,请为目标视图控制器的相关模拟指标选择“推断”以外的一些值。这将确保 IB 生成一致的布局结果。
* 运行时的结果应该是相同的,除非有任何逻辑在视图取消归档后立即依赖于初始布局。