【问题标题】:Misplaced views each time Xcode restarts每次 Xcode 重新启动时视图错位
【发布时间】:2015-05-31 03:27:37
【问题描述】:

我第一次在我的应用中使用故事板

当我关闭 Xcode 时,我收到了 0 个关于错位视图或与我的故事板有关的任何内容的警告。当我重新启动 Xcode 并打开情节提要时,我的 15 个场景中有 3 个有错位的视图警告。

无需接触任何东西(除了选择文件),我可以发出git status 并查看 .storyboard 文件是否有更改。如果我git diff,我会在文件的多个区域看到此内容:

<variation key="widthClass=compact" misplaced="YES">
    <rect key="frame" x="8" y="56" width="130" height="34"/>
</variation>

如果元素已经有&lt;variation key="widthClass=Compact" 节点,则添加misplaced 属性和rect 节点。

要让警告消失,我唯一要做的就是单击每个警告,确保选中“更新框架”,然后单击“修复错位”。在我重新启动 Xcode 之前,这会解决所有问题。

我的场景的基本结构是:

UIView
    UICollectionView
        UICollectionReusableView
        UICollectionViewCell
        UICollectionViewCell
    UISegmentedControl

如何防止每次重新启动时发生这种情况?

【问题讨论】:

  • 可能是同一件事(或相关的)...stackoverflow.com/a/6903204/499581
  • @I'L'l 指出,这是 XCode 的问题。
  • 有时候如果你打开storyboard什么都没做,就会出现错位警告,你会看到打开storyboard文件的时候会马上出现M符号。除非您想进行更改,否则不要打开 sotryboard。
  • 尝试重新启动计算机或重新加载项目,因为这是 Xcode 问题
  • 您使用的是尺寸等级吗?如果没有,也许禁用它们?

标签: ios objective-c xcode interface-builder autolayout


【解决方案1】:
  1. 点击预览常规文件(不是.xib.storyboard 文件)
  2. 退出 Xcode
  3. 运行git checkout .
  4. 重启 Xcode

.storyboard 文件现在没有被修改。

【讨论】:

    【解决方案2】:

    一个简单的解决方法可能是让 Xcode 为您选择约束,然后返回并检查它选择的内容以确保它适合您。

    在故事板中:

    • 选择视图控制器会给您带来问题
    • 解决自动布局问题(右下)
    • 选定视图:重置为建议 约束

    检查哪些约束已被重置:

    • 选择控制器中的每个视图
    • 约束检查器(右上角)
    • 向下滚动并检查约束

    【讨论】:

      【解决方案3】:

      在故事板的底部,我们可以选择尺寸等级。如果我将选项从 wRegular hRegular 更改为任何其他选项,我会遇到类似的问题。我不知道这是什么原因。

      尝试通过在打开项目后选择与关闭项目之前选择的相同尺寸等级来解决它。

      例如,如果您为 iPhone 选择了尺寸等级为 wCompact hRegular 并且您已经关闭了您的项目。再次打开项目后,你会看到size class已经变成了wRegular hRegular。因此,视图对象会发生变化。再次选择 wCompact hRegular 以解决问题。

      希望它会有所帮助。

      【讨论】:

        【解决方案4】:

        在我的情况下,所有具有自定义字体和固有(未明确定义)大小的标签/按钮都会发生这种情况。看起来像 Xcode 错误。

        【讨论】:

        • 这是一个 Xcode 错误,在 Xcode 8.2.1 中似乎仍然存在/返回。解决方法:为视图使用代码。
        【解决方案5】:

        我以前遇到过同样的问题,我想这不是我们的错,这只是 Xcode 的错误。

        如果您的.storyboard 文件已更改但您没有触摸任何内容,只需选择该文件并选择Xcode 菜单Source Control -> Discard Changes in "xxxx.storyboard"...,它应该可以工作:)

        【讨论】:

          【解决方案6】:

          视图错位的一个可能原因是: 如果您在情节提要中使用了实时视图(IBDesignables),那么如果您在 IB 完成构建所有实时视图之前打开情节提要并快速移动到其他文件,则视图会放错位置。只要您在编辑器中查看故事板,IB 就会开始构建实时视图。要修复错位的视图,请让 IB 有时间通过​​在故事板上停留片刻来完成故事板的构建,错位的视图将得到修复。

          【讨论】:

          • 这并不能真正回答问题。如果您有其他问题,可以点击 提问。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
          • @HiDeo:我试图回答这个问题,但我猜我选择的单词不正确。我已经编辑了帖子以使其更有意义(我希望!)
          【解决方案7】:

          这通常发生在您没有正确设置约束时。

          尝试删除 UIViewController 中的所有视图,然后重新添加新的视图以及您的约束。

          清理并运行您的代码。

          【讨论】:

            【解决方案8】:

            我以前的应用程序也遇到过同样的问题。我注意到这里故事板的大小很重要。

            这是 Xcode 问题。

            如果我们使用任意宽度任意高度的情节提要,就不会出现这个问题。 如果您使用大小为紧凑宽度常规高度的情节提要,则会出现此问题。

            所以尝试在 Xcode 中使用 默认故事板尺寸

            【讨论】:

              【解决方案9】:

              如果您使用的是尺寸等级,那么您的约束条件不符合要求(如果是 Any-Any,则根据所有设备类型)。如果没有,请尝试调整框架或约束并再次检查。

              自动布局也可能导致此问题。 单击它们后,您将获得有关警告的所有信息。

              【讨论】:

                【解决方案10】:

                当您在运行时添加不适合实际屏幕尺寸的约束时会导致此问题。 例如:如果您有一个宽度超过屏幕宽度(假设宽度为 600)的 UIButton,并且您向该 UIButton 添加了固定宽度约束但没有前导或尾随约束,Xcode 不会给您警告,因为没有冲突,但是当您在屏幕宽度小于 600 的设备或模拟器上实际运行应用程序时,Xcode 会自动调整 UIButton 宽度以适应小于 600 的屏幕宽度,从而导致您的布局约束在运行时更改为适合屏幕的内容

                【讨论】:

                  【解决方案11】:

                  首先检查您是否实施了所有约束。如果所有约束都正确,则删除相关约束并再次反驳。

                  【讨论】:

                  • 我也面临同样的问题,但您只需使用“修复错位”即可轻松解决。您不必担心,因为这发生在您不使用正常尺寸时。
                  猜你喜欢
                  • 1970-01-01
                  • 2015-01-20
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-01-29
                  相关资源
                  最近更新 更多