导致以下警告的原因(以及iOS 7上的后续对齐问题)?
属性不可用:相对于8.0之前的iOS版本上的布局边距的布局属性
答案 0 :(得分:91)
所有发布的答案都没有为我解决问题。但原因如下:默认情况下,Xcode 6会根据相对边距创建约束。这些仅在iOS 8.0及更高版本上可用。当您的部署目标设置为iOS 7.0或更低版本时,您会收到这些警告。
我修正警告的方式:
答案 1 :(得分:61)
禁用“首选保证金相对”
答案 2 :(得分:38)
取消选中“首选保证金相对”复选框可以防止您进入收到此警告的情况。
如果你像我一样,并且在实现问题之前构建了一个带有约束的整个应用程序,那么事情会有点困难,因为Xcode不会轻易告诉你哪些约束是个问题。
为了避免重建我的所有约束,我求助于查看实际的.storyboard文件,我寻找这样的约束:
<constraint firstItem="vId-..." firstAttribute="top" secondItem="In7-..." secondAttribute="topMargin" id="C0H-..."/>
注意“topMargin”。以“Margin”结尾的属性会导致警告。我通过这种方式检查了文件中的约束,然后在IB中删除并重新创建了它们。在那之后,这个警告就消失了。
我怀疑这也应该解决iOS 7和iOS 8约束处理之间的一些不一致问题,尽管我仍然遇到一些行为上的差异,即使在解决了所有Xcode警告之后也是如此。
答案 3 :(得分:6)
我目前处于相同的情况,因为我在Xcode 6中创建了一个针对iOS7和8的应用程序。出现此警告是因为相对于边距的约束在iOS7中不可用,但它们是默认创建的在Xcode 6中。
您可以完全返回并编辑约束,以便不使用此问题的其他答案所建议的“相对于保证金”功能。
创建新约束时,我在选择要创建的约束类型时按住Option键。这使我能够立即创建一个不基于边距的约束,因此我不必在之后返回并修复它。
答案 4 :(得分:4)
默认情况下,Xcode 6会根据相对边距创建约束。
因此,如果您想强制删除所有基线属性并且不想在Interface Buidler中搜索所有不良约束,为了支持 iOS 7 ,我可以推荐这种方式
.*"baseline".*\n
<强> UPD:强> 我发现“基线”约束也会导致崩溃,但Xcode没有显示有关这些约束的任何警告!
要修复它 - 按模式从故事板文件中删除所有字符串:.*"baseline".*\n
答案 5 :(得分:3)
我选择了非程序员方法。
我知道哪个视图控制器导致8.0边距消息。所以,我去了我的约束列表。我有33个。我删除了导致8.0保证金消息的每一个。我下降到20(所以11是问题)。
选择32 over 33 delete并查看结果。选择31超过33删除等等......自然当消息仍然存在时......删除有问题的消息。
所以我花了 5分钟来解决错误消息。
确实出现了其他约束信息,但这并不是什么大问题。
好了,重做并逐步解决约束消息,但这次检查你添加的所有约束都不会引起8.0边缘消息的重新出现。如果是这样,请在添加约束时撤消并采取其他策略。总是有另一种方法可以添加一个有效的约束。
这不是Xcode提出的,但它会完成这项工作。
最后,完成了。
如果您有多个视图控制器,并且不知道是否会导致8.0边距消息,请尝试隔离每个视图控制器。可以在一个单独的测试项目中进行复制和粘贴,或者删除除一个以外的所有其他视图,然后查看结果。
使用&#34;创建快照&#34;如果出现问题,可以在文件菜单中帮助你。
答案 6 :(得分:0)
压制警告:我经历了所有IB约束并删除了所有说“First Baseline ...”。这使得所有这些警告都消失了。但是,如果您“添加缺失的约束”或“重置为建议的约束”,IB将重新引入警告。
可能的原因:从一个全新的Xcode 6.1项目,我使用“重置为建议的约束”在Storyboard中(懒惰地)复制/粘贴ViewControllers。然后将项目目标从8.0更改为7.1。这导致警告弹出。我注意到警告只发生在我的某些ViewControllers上,我相信这是我在Storyboard中复制/粘贴的那些。
建议:如果定位7.1,请在使用IB之前进行设置。不要在Storyboard中复制/粘贴视图控制器。在IB工作时要小心“新警告”,所以我们希望能够确认这种烦恼的原因。