私は Xcode 6 Beta 3、iOS 8 SDK を使用しています。Swift を使用してターゲット iOS 7.0 をビルドします。以下のスクリーンショットで問題を段階的に参照してください。
Storyboard に UICollectionView があります。中央に 1 つのラベル (自動サイズ変更ルールなし) を含む 1 つのプロトタイプ UICollectionViewCell。紫色の背景は、セルによって実行時に生成される contentView をマークするためのものだと思います。そのビューは、最終的には UICollectionViewLayoutDelegate に基づいて適切にサイズ変更されますが、iOS 7 ではそうではありません。Xcode 6 を使用しており、問題は iOS 7 でのみ発生することに注意してください。
iOS 8 でアプリをビルドすると、すべて正常になります。
注: 紫色はコンテンツビュー青は角が丸い UIButton です。
しかし、iOS 7 では、セル内のすべてのサブビューが突然 (0,0,50,50) のフレームに縮小され、自動サイズ変更ルールに準拠しなくなりました。
これは iOS 8 SDK または Swift、あるいは Xcode のバグだと思いますか?
アップデート1:この問題は、公式 Xcode 6.0.1 でも依然として存在します。最善の回避策は、KoCMoHaBTa が以下で提案しているように、セルの cellForItem にフレームを設定することです (ただし、セルをサブクラス化する必要があります)。これは、iOS 8 SDK と iOS 7 の非互換性によるものであることが判明しました (Apple から引用した ecotax の回答を以下で確認してください)。
アップデート2:このコードをアイテムのセルそして、すべてはうまくいくはずです:
/** 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 **/
ベストアンサー1
contentViewが壊れています。awakeFromNibでも修正できます。
オブジェクト:
- (void)awakeFromNib {
[super awakeFromNib];
self.contentView.frame = self.bounds;
self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}
スウィフト3:
override func awakeFromNib() {
super.awakeFromNib()
self.contentView.frame = self.bounds
self.contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
}