每次Xcode重新启动时错误放置视图

时间:2015-03-26 22:15:33

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

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

当我关闭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>

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

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

我的场景的基本结构是:

UIView
    UICollectionView
        UICollectionReusableView
        UICollectionViewCell
        UICollectionViewCell
    UISegmentedControl

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

11 个答案:

答案 0 :(得分:2)

当您没有正确设置约束时,通常会发生这种情况。

尝试删除UIViewController中的所有视图,并再次添加新的约束条件。

清理并运行您的代码。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

在我的情况下,它适用于所有带有自定义字体和内在(未明确定义)尺寸的标签/按钮。看起来像Xcode错误。

答案 3 :(得分:1)

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

如果您的.storyboard文件已更改但未触及任何内容,请选择该文件并选择Xcode菜单Source Control - &gt; Discard Changes in "xxxx.storyboard"...,它应该工作:)

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

我以前的应用程序曾经面临同样的问题。我注意到的是,故事板的大小在这里很重要。

这是Xcode问题。

如果我们使用任何宽度任何高度的故事板,这个问题都不会发生。 如果您使用的尺寸为紧凑宽度常规高度的故事板,则会出现此问题。

因此,请尝试在Xcode

中使用默认情景画板大小

答案 7 :(得分:0)

  1. 点击预览常规文件(不是.xib.storyboard文件)
  2. 退出Xcode
  3. 运行git checkout .
  4. 重启Xcode
  5. 现在不修改.storyboard文件。

答案 8 :(得分:0)

一个简单的修复方法可能是让Xcode为您选择约束,然后返回并检查它所选择的内容以确保它对您有用。

在故事板中:

  • 选择View Controller为您提供问题
  • 解决自动布局问题(右下角)
  • 所选视图:重置为建议 约束

检查已重置的约束:

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

答案 9 :(得分:0)

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

尝试通过在关闭项目之前选择打开项目后选择相同的大小类来解决它。

例如,如果您已选择尺寸类为wCompact hRegular for iPhone并且已关闭项目。再次打开项目后,您将看到size类已更改为wRegular hRegular。因此,视图对象会发生变化。再次选择wCompact hRegular以解决问题。

希望它会有所帮助。

答案 10 :(得分:-3)

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