0

iPad プロジェクトで、自動レイアウト制約によりエラーが発生しています。デバイスを横向きに回転すると、IBで作成したカスタムUICollectionViewCellで発生しています。問題は、どの制約も削除できないということです。私はまだ自動レイアウトを学習しているので、いくつかの制限を追加してデフォルトのものをいくつか削除するだけの問題になると確信していますが、行き詰まっています. カスタムセルで間違いなく発生しています-それを削除してプレーンな古い UICollectionViewCell を使用すると、エラーは発生しません。

私は周りを検索し、カスタムセルで translatesAutoresizingMaskIntoConstraints を NO に設定しようとしましたが、次のエラーが発生しました:

キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: '-layoutSubviews の実行後も自動レイアウトが必要です。-layoutSubviews の UICollectionView の実装では、super を呼び出す必要があります。

カスタム セルのサブビューで NO に設定すると問題なく動作しますが、セル自体に設定すると、バーフします。

これが私が得ている自動レイアウト制約エラーです-それは通常のものです:

おそらく、次のリストの制約の少なくとも 1 つが望ましくないものです。これを試してみてください: (1) 各制約を見て、どれが予期しないものかを把握してみてください。(2) 不要な制約を追加したコードを見つけて修正します。(注: 理解できない NSAutoresizingMaskLayoutConstraints が表示されている場合は、UIView プロパティ translatesAutoresizingMaskIntoConstraints のドキュメントを参照してください)

(
"NSAutoresizingMaskLayoutConstraint:0x76bf950 h=-&- v=-&- CMAGalleryCollectionViewCell:0x7687690.height == UICollectionView:0x9161e00.height - 875",

"NSAutoresizingMaskLayoutConstraint:0x76693c0 h=--& v=--& V:[UIView:0x7665470(704)]",

"NSLayoutConstraint:0x7665850 UICollectionView:0x9161e00.bottom == UIView:0x7665470.bottom",

"NSLayoutConstraint:0x7665740 V:|-(0)-[UICollectionView:0x9161e00] (名前: '|':UIView:0x7665470)" )

制約 NSLayoutConstraint:0x7665850 UICollectionView:0x9161e00.bottom == UIView:0x7665470.bottom を破って回復を試みます

ヘルプや提案は大歓迎です。

ありがとう!

4

1 に答える 1

0

私はこれをたくさん打った。デバイス/アプリケーションを回転すると、ビューの幅/高さが新しい向きの画面に合わせて変更され、「幅 = 320」タイプの制約が破られることがよくあります。

上記の例外は、これを読むまで判読できないことがわかりました: http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/AutolayoutPG/Articles/formatLanguage.html

...これは示されている形式に似ており、何が問題であるかが非常に簡単にわかりました。

表示されている削除不可の制約は変更できます。優先度を 1000 から壊れる可能性のあるものに下げるか、機能するものに置き換えることができます。1 つの (不完全な) アプローチは、>= 320 のルールを作成して、ランドスケープに合わせて拡張できるようにするか、独自の制約を追加して与えることです (おそらく、ビューをそのスーパービューに結び付けてから、幅の制約を削除可能にする必要があります)。と述べ、それは良い解決策ではありません。

通常、メイン ビューの形状/サイズに反応する必要があるもの (大規模なコレクション ビューなど) で可能な場合は、幅と高さの制約を削除することをお勧めします。これらの幅/高さは通常 50% 間違っていますオリエンテーションの。

つまり、これはセルの高さがコレクションの高さから 875 を引いたものであるということですか?

CMAGalleryCollectionViewCell:0x7687690.height == UICollectionView:0x9161e00.height - 875",

このセルはコレクション ビューのサブ ビューであり、セルのテンプレートではありませんか? インターフェイスビルダーとコレクションにも問題がありました。偽の子セルを追加しないように、IB でコレクション ビューを最初から再構築する必要がありました。

于 2013-02-01T16:47:37.027 に答える