ストーリーボードプロトタイプセル(Xcode 6、iOS 8 SDK)のUICollectionViewCell contentViewのフレームの自動サイズ変更の問題は、iOS 7で実行している場合にのみ発生します。質問する

ストーリーボードプロトタイプセル(Xcode 6、iOS 8 SDK)のUICollectionViewCell contentViewのフレームの自動サイズ変更の問題は、iOS 7で実行している場合にのみ発生します。質問する

私は 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 です。

https://i.sstatic.net/uDNDY.png

しかし、iOS 7 では、セル内のすべてのサブビューが突然 (0,0,50,50) のフレームに縮小され、自動サイズ変更ルールに準拠しなくなりました。

https://i.sstatic.net/lOZH9.png

これは 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]
}

おすすめ記事