Xcode 6 Beta 3、iOS 8 SDKを使用しています。Swiftを使用してターゲットiOS 7.0をビルドします。以下のスクリーンショットを使用して、私の問題を段階的に参照してください。
StoryboardにUICollectionViewがあります。中央に1つのラベルを含むプロトタイプUICollectionViewCell(自動サイズ変更ルールなし)。紫色の背景は、実行時に生成されたContentViewをマークすることでした。そのビューは、UICollectionViewLayoutDelegateに基づいて適切にサイズ変更されますが、iOS 7では変更されません。Xcode6を使用しているため、問題はiOS 7でのみ発生します。
iOS 8でアプリをビルドするとき。すべてが大丈夫です。
注:紫はcontentView、青は角が丸いUIButtonです。
ただし、iOS 7では、セル内のすべてのサブビューが突然(0,0,50,50)のフレームに縮小され、自動サイズ変更ルールに準拠しなくなります。
これはiOS 8 SDKまたはSwift、あるいはXcodeのバグだと思いますか?
更新1:この問題は公式のXcode 6.0.1にも存在します!最善の回避策は、セルのcellForItemにフレームを設定することにより、KoCMoHaBTaが以下に提案したもののようです(ただし、セルをサブクラス化する必要があります)。これはiOS 8 SDKとiOS 7の間の非互換性であることが判明しました(Appleから引用された以下のecotaxの回答を確認してください)。
更新2: このコードをcellForItemの先頭に貼り付けます。問題はありません。
/** Xcode 6 on iOS 7 hot fix **/
cell.contentView.frame = cell.bounds;
cell.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
/** End of Xcode 6 on iOS 7 hot fix **/
contentView
セルに合わせて強制的にサイズ変更することで、問題を回避できます。iOS 8では、AppleはセルビルダーのビューがInterface Builderで作成されたときの処理方法に何らかの変更を加えたと思います(いずれにしても、それはまだブラックボックスです)。しかし、iOS 7をターゲットにすると動作が変わるというのは確かにバグです。
contentView
エッジをセルのエッジに固定することで修正します。