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