Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在8.0之前的iOS版本中,相对于版面边距的版面属性_Ios_Autolayout - Fatal编程技术网

在8.0之前的iOS版本中,相对于版面边距的版面属性

在8.0之前的iOS版本中,相对于版面边距的版面属性,ios,autolayout,Ios,Autolayout,什么会导致以下警告(以及iOS 7上的后续对齐问题) 属性不可用:在8.0之前的iOS版本上,相对于版面边距的版面属性 禁用“首选相对边距” 取消选中“相对更喜欢保证金”复选框将使您避免陷入收到此警告的情况 如果你像我一样,在意识到问题之前构建了一个带有约束的整个应用程序,那么事情就有点难了,因为Xcode不会轻易告诉你哪些约束是问题 为了避免重建所有约束,我求助于查看实际的.storyboard文件,并查找如下约束: <constraint firstItem="vId-..." fir

什么会导致以下警告(以及iOS 7上的后续对齐问题)

属性不可用:在8.0之前的iOS版本上,相对于版面边距的版面属性

禁用“首选相对边距”

取消选中“相对更喜欢保证金”复选框将使您避免陷入收到此警告的情况

如果你像我一样,在意识到问题之前构建了一个带有约束的整个应用程序,那么事情就有点难了,因为Xcode不会轻易告诉你哪些约束是问题

为了避免重建所有约束,我求助于查看实际的.storyboard文件,并查找如下约束:

<constraint firstItem="vId-..." firstAttribute="top" secondItem="In7-..." secondAttribute="topMargin" id="C0H-..."/>

注意“topMargin”。以“Margin”结尾的属性会导致警告。我以这种方式检查并识别了文件中的约束,然后在IB中删除并重新创建了它们。之后,这个警告消失了


我怀疑这也可以解决iOS 7和iOS 8约束处理之间的一些不一致问题,尽管在解决所有Xcode警告之后,我仍然遇到一些行为上的差异。

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

我修正警告的方式:

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

我目前的情况与我在Xcode 6中创建一个针对iOS7和iOS8的应用程序的情况相同。出现该警告是因为相对于边距的约束在iOS7中不可用,但它们是在默认情况下在Xcode 6中创建的

您完全可以返回并编辑约束,以不使用此问题的其他答案所建议的“相对于边距”功能


创建新约束时,我在选择要创建的约束类型时按住Option键。这使我能够立即创建一个不基于边距的约束,这样我就不必在事后返回并修复它。

我采用了非程序员的方法

我知道是哪个视图控制器导致了8.0页边距消息。所以,我去了我的约束列表。我有33个。我已经删除了所有导致8.0页边距信息的内容。我降到了20(所以11是个问题)

选择32比33删除并查看结果。选择31比33删除,依此类推。。。当然,当信息仍然存在时。。。删除有问题的

因此,我花了5分钟来解决错误消息

其他约束消息也出现了,但这并不是什么大问题

然后,一步一步地重做并解决约束消息,但这次检查您添加的所有约束是否不会引发8.0页边距消息的重新出现。如果是,则在添加约束时撤消并采用其他策略。总有其他方法可以添加有效的约束

这不是Xcode所建议的,但它可以完成这项工作

最后,您的操作完成了

如果您有多个视图控制器,并且不知道是哪个视图控制器导致8.0页边距消息,请尝试隔离每个视图控制器。可以在单独的测试项目中,复制并粘贴或删除除一个视图之外的所有其他视图并保存结果


如果出现问题,使用“文件”菜单中的“创建快照”可以帮助您。

抑制警告:我检查了所有IB约束并删除了所有显示“第一基线…”的内容。这使得所有这些警告都消失了。但是,如果您“添加缺少的约束”或“重置为建议的约束”,IB将重新引入警告

可能的原因:从一个新的Xcode 6.1项目中,我使用“重置为建议的约束”在情节提要中复制/粘贴ViewController(延迟)。然后将项目目标从8.0更改为7.1。这导致警告弹出。我注意到警告只出现在我的某些ViewController上,我相信这些都是我在故事板中复制/粘贴的

建议:如果目标是7.1,请在使用IB之前预先设置。不要在情节提要中复制/粘贴视图控制器。在IB中工作时要警惕“新警告”,因此希望我们能够确认这种烦恼的原因

默认情况下,Xcode 6基于相对边距创建约束。

因此,如果您想强制删除所有基线属性,并且不想在Interface Buidler中搜索所有不好的约束,为了支持iOS 7,我可以推荐这种方法

要查找并删除约束中具有“基线”的所有伪字符串,可以执行以下操作:
  • 闭合Xcode
  • 在您喜爱的支持regexp的文本编辑器中打开stroyboard文件
  • 按模式查找并从情节提要文件中删除所有字符串:
    *“基线”。*\n
  • 现在保存文件并在Xcode中打开它
  • 修复所有出现的未对齐:查找所有警告并按“更新所有视图的约束”保存所有视图的原始位置
  • 利润

  • UPD: 我发现“基线”约束也会导致崩溃,但Xcode没有显示任何关于这些约束的警告


    要解决此问题,请按模式从情节提要文件中删除所有字符串:
    *“基线”。*\n

    这对我更有帮助。我收到了一些警告实例,但在情节提要源文件中找不到字符串“边距”。Grr。划破它!我在错误的项目窗口。啊!在读你的书之前,我自己弄明白了