1. ホーム
  2. objective-c

[解決済み] StoryboardのプロトタイプセルでUICollectionViewCell contentViewのフレームが自動サイズ調整される問題(Xcode 6, iOS 8 SDK)がiOS 7のみで発生する

2022-04-25 21:26:54

質問事項

Xcode 6 Beta 3、iOS 8 SDKを使用しています。ビルドターゲット iOS 7.0 using Swift. 私の問題のステップバイステップを、以下のスクリーンショットとともに参照してください。

StoryboardにUICollectionViewがあります。プロトタイプのUICollectionViewCellが1つあり、中央にラベルが1つ入っています(自動サイズ調整ルールなし)。紫色の背景は、Cellによって実行時に生成されるcontentViewをマークするためだと思う。このビューはいずれUICollectionViewLayoutDelegateに基づいて適切にリサイズされる予定だが、iOS 7ではそうなっていない。Xcode 6を使っていて、この問題はiOS 7でしか起きないことに注意。

iOS 8でアプリをビルドした場合。すべて問題ありません。

注:紫色は コンテンツビュー 青色は角丸のUIButtonです。

しかし、iOS 7では、セル内のすべてのサブビューが突然(0,0,50,50)のフレームに収縮し、私のAutoresizingルールに従わなくなった。

これはiOS 8 SDKかSwift、あるいはXcodeのバグだと思うのですが?


アップデート1: この問題は、公式のXcode 6.0.1でもまだ存在しています ! この問題を回避するには、以下のKoCMoHaBTaさんの提案のように、セルのcellForItemにフレームを設定することです(ただし、セルのサブクラスを作成する必要があります)。これはiOS 8 SDKとiOS 7の間の非互換性であることが判明しました(下記のecotaxの回答はAppleからの引用です)。

アップデート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 **/

解決方法は?

contentViewが壊れている。awakeFromNibでも修正可能です。

ObjCです。

- (void)awakeFromNib {

    [super awakeFromNib];

    self.contentView.frame = self.bounds;
    self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}

Swift3です。

override func awakeFromNib() {
    super.awakeFromNib()

    self.contentView.frame = self.bounds
    self.contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
}