アプリで初めてストーリーボードを使用しています
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
再起動するたびにこれを防ぐにはどうすればよいですか?
ビューを誤って配置する理由の1つは、ストーリーボードでライブビュー(IBDesignables)を使用した場合、ストーリーボードを開いて、IBがすべてのライブビューの構築を完了する前に他のファイルにすばやく移動すると、ビューが誤って配置されることです。 IBは、エディターでストーリーボードを表示するとすぐにライブビューの構築を開始します。誤って配置されたビューを修正するには、IBを少しの間ストーリーボードにとどめてストーリーボードの構築を完了するまでしばらく待ちます。そうすれば、誤って配置されたビューが修正されます。
私の場合、カスタムフォントと組み込み(明示的に定義されていない)サイズのすべてのラベル/ボタンで発生します。 Xcodeのバグのように見えます。
これは通常、制約を適切に設定していない場合に発生します。
UIViewController内のすべてのビューを削除し、制約とともに新たに追加してみてください。
コードをクリーンにして実行します。
以前にも同じ問題に直面していますが、それは私たちのせいではなく、Xcodeのバグにすぎないと思います。
もしあなたの .storyboard
ファイルは変更されましたが、何もタッチしていません。ファイルを選択してXcodeメニューを選択してくださいSource Control
-> Discard Changes in "xxxx.storyboard"...
、それは動作するはずです:)
以前のアプリでも同じ問題に直面していました。ここで気づいたのは、ストーリーボードのサイズが重要だということです。
これはXcodeの問題です。
any width any heightのストーリーボードを使用する場合、この問題は発生しません。サイズコンパクトな幅、通常の高さのストーリーボードを使用している場合、この問題が発生します。
Xcodeでデフォルトのストーリーボードサイズを使用してみてください
この問題は、実行時に実際の画面サイズに合わない制約を追加した場合に発生します。たとえば、画面幅(幅600など)を超える幅のUIButtonがあり、そのUIButtonに固定幅制約を追加し、先行または後続の制約を追加しない場合、競合がないためXcodeは警告を表示しませんが、画面幅が600未満のデバイスまたはシミュレーターでアプリを実際に実行すると、Xcodeは自動的にUIButtonの幅を調整して画面幅が600未満になるようにし、レイアウトの制約を実行時に画面に合わせたものに変更します
ストーリーボードの下部には、サイズクラスを選択するオプションがあります。オプションをwRegular hRegularから他のオプションに変更すると、同様の問題が発生します。この理由はわかりません。
プロジェクトを閉じる前に選択したものと同じサイズクラスをプロジェクトを開いて選択することにより、解決を試みてください。
たとえば、サイズクラスをiPhoneのwCompact hRegularとして選択し、プロジェクトを閉じた場合。プロジェクトを再度開くと、サイズクラスがwRegular hRegularに変更されていることがわかります。このため、ビューオブジェクトが変更されます。問題を解決するには、wCompact hRegularをもう一度選択します。
それが役立つことを願っています。
サイズクラスを使用している場合、いずれかの制約が限界に達していません(Any-Anyの場合、すべてのデバイスタイプによる)。そうでない場合は、フレームまたは制約を調整して、もう一度確認してください。
自動レイアウトもこの問題を引き起こす可能性があります。警告をクリックすると、警告に関するすべての情報が表示されます。
単純な修正方法としては、Xcodeが制約を選択できるようにし、戻って選択内容を確認し、動作することを確認します。
ストーリーボード内:
リセットされた制約を確認するには:
.xib
または.storyboard
ファイル)git checkout .
.storyboard
ファイルは現在変更されていません。