每当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中使用默认的故事板大小
- 单击以预览常规文件(不是
.storyboard
或.storyboard
文件) - 退出xcode
- 运行
git checkout .
- 重新启动xcode
.storyboard
文件现在不被修改。
一个简单的解决办法可能是简单地让xCode为你select约束条件,然后返回并检查它select了什么,以确保它能为你工作。
在故事板中:
- select视图控制器给你的问题
- 解决自动布局问题(右下angular)
- 选定的视图:重置为build议的约束
检查什么约束已被重置:
- select控制器内的每个视图
- 限制检查员(右上)
- 向下滚动并检查约束
在故事板的底部,我们可以select尺寸等级。 如果我从wRegular hRegular选项更改为任何其他选项,我得到类似的问题。 我不知道这个原因。
尝试通过在closures项目之前打开项目后select相同的大小类来解决它。
例如,如果您已经为iPhoneselect了尺寸类为wCompact hRegular,并且已经closures了您的项目。 再次打开项目后,您会看到大小类已更改为wRegular hRegular。 因为这个视图对象的变化。 再次selectwCompact hRegular来解决问题。
希望它会有所帮助。
首先检查你是否实现了所有的约束。如果所有的约束都是正确的,那么删除相关的约束并再次反驳。