これは非常に遅い返信であることは承知していますが、私もこれを経験しました。
ビュー コントローラー内で、それをMyViewControllerと呼びましょう。UICollectionView
カスタムUICollectionViewCell
s を使用しています。私はメソッドcollectionView:layout:sizeForItemAtIndexPathを実装していUICollectionView
ます。
MyViewControllerは、 autolayout を使用してストーリーボードで作成され、 の高さを制御しUIViewController
ます。
セルは、ポートレート モードではきれいに見えますが、ランドスケープ モードではそうではありませんでした。
メソッド内のを無効にすることで問題を解決しましたUICollectionViewLayout
。UICollectionView
viewWillLayoutSubviews
- (void)viewWillLayoutSubviews {
[self.myCollectionView.collectionViewLayout invalidateLayout];
}
以前、 内のレイアウトを無効にしようとしましたwillAnimateRotationToInterfaceOrientation:duration
が、うまくいきませんでした。これはおそらく、すべてのビューのサイズがまだ計算されていないためです。そのため、autolayout が魔法を終えるまで待つ必要があります。この SO スレッドを参照します。
Swift 4.0 の更新:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.myCollectionView.collectionViewLayout.invalidateLayout()
}