相对于8.0之前的iOS版本上的布局边距的布局属性

时间:2014-08-12 09:54:31

标签: ios autolayout

导致以下警告的原因(以及iOS 7上的后续对齐问题)?

  

属性不可用:相对于8.0之前的iOS版本上的布局边距的布局属性

7 个答案:

答案 0 :(得分:91)

所有发布的答案都没有为我解决问题。但原因如下:默认情况下,Xcode 6会根据相对边距创建约束。这些仅在iOS 8.0及更高版本上可用。当您的部署目标设置为iOS 7.0或更低版本时,您会收到这些警告。

我修正警告的方式:

  • 单击Xco​​de中的警告
  • 属性检查器将打开约束
  • 搜索有保证金的项目(见截图)
  • 关闭相对于保证金选项

Attribute inspector

答案 1 :(得分:61)

禁用“首选保证金相对”

enter image description here

答案 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”查找和删除所有虚拟字符串,您可以执行以下操作:

  1. 关闭Xcode
  2. 在您喜欢的文本编辑器中打开您的stroyboard文件,该编辑器支持regexp。
  3. 按模式查找并从storyboard文件中删除所有字符串:.*"baseline".*\n
  4. 现在保存文件并在Xcode中打开它
  5. 修复所有出现的错位:找到所有警告并按“更新所有视图的约束”以保存所有视图的原始位置。
  6. 利润!

  7. <强> 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工作时要小心“新警告”,所以我们希望能够确认这种烦恼的原因。