每当我在故事板文件中出现冲突时,我通常都可以解决它。但是,我有一个问题,现在两周内出现两次。
在我的Storyboard文件的最底部,我看到名为“inferredMetricsTieBreakers”的块,其中包含一堆“segue”标签。似乎我本地仓库中的一些segue与远程仓库中的另一个segue相冲突。为了安全起见,我可以“选择两者”。但由于这种情况曾经发生过一次,我担心它会继续发生,最终在我的故事板文件末尾有一长串的这些segue引用。
只是想知道是否有人对文件中的这些标签非常了解,或者我是否应该盲目地继续“选择两者”并忽略该问题。
谢谢, -Dan。
答案 0 :(得分:60)
故事板中的每个视图控制器都有"模拟指标"您可以在属性检查器中看到:
推断出其中一些指标(因此,推断指标)。
正如@thesystem所提到的,如果给定的视图控制器是多个segue的目标,则segue的源视图控制器的模拟度量之间可能存在差异。为了解决这些差异,IB在解析目标视图控制器的推断指标时会选择一个segue来打破平局。
inferredMetricsTieBreakers
部分是安全的,因为IB可以选择不同的打破平局段。但是,无法保证新的断路器能够在IB中产生相同的布局结果。*
例如,我有一种情况,根据打破平局的情况,IB中显示的视图控制器有或没有状态栏。在两种情况下,其视野保持568pts的高度,使得顶部布局指南的位置保持变化。对于限制在顶部布局指南中的视图帧,这可能会发生其他不希望的(并且在很大程度上无意义)更改。
根据这些观察结果,不建议选择新的和旧的推断指标集。相反,删除两个集合,然后在IB中打开故事板以允许在提交合并之前断开绑定。为了避免由于打破平局的变化导致的不期望的帧更改,请选择除" Inferred"之外的其他值。用于目标视图控制器的相关模拟度量。这将确保IB生成一致的布局结果。
*运行时的结果应该相同,除非在取消归档视图后立即依赖初始布局的逻辑。
答案 1 :(得分:37)
同样的事情发生在这里。使用“同时选择”方法后,我的故事板文件出错。发现在故事板中搜索segue引用会导致inferredMetricsTieBreakers
部分中提到的一个segue。从列表中删除segue解决了我的破坏构建。
为了尝试找出这个inferredMetricsTieBreakers
做了什么,我尝试先删除整个部分。打破我的构建。接下来我删除了所有项目。在构建期间,Xcode在我的列表中添加了2个新的和不同的segue(在合并之前我有3个)。我正在构建的应用程序工作正常。
我的结论:删除所有物品并执行干净的构建是安全的。这将使您的故事板保持清洁。
答案 2 :(得分:2)
看起来,在故事板中发生了断路器,一个视图控制器通过segues从两个或多个其他视图控制器连接,并且其模拟的度量设置被设置为“推断”但是Xcode无法确保推断意味着一个每种情况下的指标设置(横向或纵向)。
我通过将所有控制器模拟指标更改为“推断”来修复它,并且所有指标都是从具有固定模拟指标设置“横向”的控制器推断出来的。之后,我从部分中删除了tie breaker segue id(但不是部分本身)。
答案 3 :(得分:0)
将指标从推断更改为自由格式(Xcode 8,Swift 3)。解决了我的问题。