【问题标题】:Storyboard missing constraint every time restart Xcode每次重新启动 Xcode 时故事板都缺少约束
【发布时间】:2015-01-20 09:18:41
【问题描述】:

storyboard 中使用auto layout,我在UILabel 上添加了一些约束并且没有警告,然后我重新启动Xcode 它会向我显示如图所示的警告,我修复了警告,但是当我重新启动时Xcode 再次出现相同的警告。 现在我的storyboard 中有大约 20 个相同的警告,我每次重启Xcode 时都必须修复它。

详细编辑

1. A UILabel with width is 0 and constraints is like this

2. When I restart Xcode, then it change to :

3. And show me the warning:

4. Then I have to click the waring button and 'Update Frame' to fix it

【问题讨论】:

  • 可能没有帮助,但这是我停止使用情节提要的原因之一。通过一些数学计算,我发现在 ViewController 中创建我的 UI 要容易得多。 :)
  • 您说的是 UILabel,但在图片上我看到了 UITableView。您应该提供更具体的示例和附加信息,例如您是否使用大小类、涉及哪些附加约束、情节提要屏幕截图(!)等。一个重要的问题是您在 在情节提要上 看到什么打开情节提要(不在左侧的导航器上):错位的视图或只是警告?
  • 尝试删除您的派生数据。
  • 我也遇到过这个问题。每次我打开 Xcode 时,都会有一些视图丢失。但是,它不会影响任何事情,因此请忽略此警告。
  • @Danyun 是的,确实不会影响任何事情,但是很麻烦。

标签: ios xcode storyboard autolayout nslayoutconstraint


【解决方案1】:

我在 Xcode 6.3 上遇到了同样的问题。每次重启机器时我都需要更新约束

【讨论】:

    【解决方案2】:

    在 XCode 版本 6.2 bate4 (6C107a) 中解决了同样的问题。

    XCode 版本 6.2 bate4
    发布时间:2015 年 1 月 12 日
    建造:6C107a

    【讨论】:

      【解决方案3】:

      经过一个简单的研究,我发现这个错误很容易被复制,并且不依赖于 git、故事板权限等。要复制它,你可以创建没有文本的 UILabel 并将其宽度设置为 0。而且你不需要添加一些额外的视图,只有一个UILabel。最后,我认为您在故事板中发现了一个错误,不幸的是我没有找到任何解决方法。也许你应该报告它https://bugreport.apple.com

      【讨论】:

      • 是的,我发现 UILabel 上出现的所有警告都没有文字,宽度(或高度)为 0,同意你的看法。
      • 现在我通过使用默认文本制作所有标签来修复它,并向苹果报告一个错误。
      • 我在 Xcode 7.2 中遇到了同样的问题,我还可以看到,如果 UILable 带有文本,那么警告仍然出现,我必须更改每个控件的框架。
      【解决方案4】:

      我们遇到了类似的问题,但在我们的案例中,我们有一张图片一直在被删除。我们做了什么来解决这个问题——我们确保我们在 Git 中有最新版本,从本地机器中删除了项目,然后再次克隆了 Git 存储库。之后一切正常。

      【讨论】:

        【解决方案5】:

        这个问题看起来不像你的 UILabel 和 tableView,但它的发生是由于容器视图包含你的两个对象。所以尝试在你的 containerView 上设置约束。如果它有效,那么您的警告将自动被删除。

        【讨论】:

          【解决方案6】:

          使用自动布局时,会运行许多自动例程。当他们在约束/视图中发现错误时,他们会尝试通过忽略“错误”约束来修复它。您会看到这些“错误”约束没有保存。

          因此,当您再次创建它们时,您正在创建立即标记为错误的约束。所以nog得救了。

          【讨论】:

          • 它们是“警告”而不是“错误”,它们没有任何影响,看起来没有保存,那么如何保存?
          • 在 Xcode 中,警告几乎总是很重要的。你不能忽视他们。而且由于自动布局根据这些错误的约束采取行动,因此它们不会被保存。因此,只要您进行无效约束,它们就不会被保存!
          【解决方案7】:

          我会修复它,对 repo 进行 git 提交,然后尝试重新启动它。如果您使用 VCS,它可能会起作用

          【讨论】:

          • 不行,我觉得不是git的问题。
          【解决方案8】:

          这可能是 Storyboard 文件的权限问题,导致您的更改无法保存。退出并重新打开 Xcode 后是否保存了对情节提要的其他更改?

          您可以通过将目录更改为您的应用程序的目录 + /Base.lproj/ 从终端检查 Main.storyboard 的权限

          cd ~/Documents/YOUR_APP_CONTAINING_FOLDER/YOUR_APP_NAME/Base.lproj/
          

          并使用命令

          ls -l
          

          Main.storyboard 上输出的权限应该是 -rw-r--r--

          如果权限正常,这个问题是只影响UILabels的自动布局约束还是所有UIElements?

          【讨论】:

          • 是的,它只会影响 UILabel 的自动布局约束。这些标签的高度为 0 或宽度为 0,因为它们的高度或宽度取决于文本。
          • @Geaka,如果是这样,答案取决于您是否希望根据文本拉伸标签。请提供您的故事板屏幕截图并说明预期结果。
          猜你喜欢
          • 1970-01-01
          • 2018-04-15
          • 1970-01-01
          • 1970-01-01
          • 2010-10-24
          • 1970-01-01
          • 2014-11-10
          • 1970-01-01
          • 2015-03-28
          相关资源
          最近更新 更多