每当Xcode重新启动,错位的视图

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

当我closuresXcode时,我有0个关于错误的视图或关于我的故事板的任何警告。 当我重新启动Xcode并打开故事板时,我的15个场景中有3个出现错误的视图警告。

不用触摸任何东西(除了select文件),我可以发出一个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节点。

要让警告消失,唯一的办法是点击每一个,确保select“更新框架”,然后点击“修复错位”。 这修复了一切,直到我重新启动Xcode。

我的场景的基本结构是:

 UIView UICollectionView UICollectionReusableView UICollectionViewCell UICollectionViewCell UISegmentedControl 

我怎样才能防止这种情况发生,每次我重新启动?

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

尝试删除UIViewController中的所有视图,并重新添加新的约束。

清理并运行你的代码。

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

在我的情况下,它发生所有标签/button与自定义字体和内部(未明确定义)的大小。 看起来像一个Xcode错误。

我以前面对同样的问题,我想这不是我们的错,这只是一个Xcode的错误。

如果你的.storyboard文件改变了,但是你没有碰到任何东西,只要select文件并selectXcode菜单Source Control – > Discard Changes in "xxxx.storyboard"... ,它应该工作:)

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

如果你正在使用大小类别,那么你的约束不符合标准(根据所有设备types,如果任何任何)。 如果不是,则尝试调整框架或限制,然后再次检查。

自动布局也可能会导致此问题。 一旦你点击它们,你会得到关于警告的所有信息。

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

这是Xcode的问题。

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

所以尝试在Xcode中使用默认的故事板大小

  1. 单击以预览常规文件(不是.storyboard.storyboard文件)
  2. 退出xcode
  3. 运行git checkout .
  4. 重新启动xcode

.storyboard文件现在不被修改。

一个简单的解决办法可能是简单地让xCode为你select约束条件,然后返回并检查它select了什么,以确保它能为你工作。

在故事板中:

  • select视图控制器给你的问题
  • 解决自动布局问题(右下angular)
  • 选定的视图:重置为build议的约束

检查什么约束已被重置:

  • select控制器内的每个视图
  • 限制检查员(右上)
  • 向下滚动并检查约束

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

尝试通过在closures项目之前打开项目后select相同的大小类来解决它。

例如,如果您已经为iPhoneselect了尺寸类为wCompact hRegular,并且已经closures了您的项目。 再次打开项目后,您会看到大小类已更改为wRegular hRegular。 因为这个视图对象的变化。 再次selectwCompact hRegular来解决问题。

希望它会有所帮助。

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