必要なのは単純です: デバイスがどのように回転されても、UICollectionView フレームを常に画面いっぱいに表示したいのです。
現在、メソッド「willAnimateRotationToInterfaceOrientation:...」を使用し、回転時にコレクション ビューを再作成するメソッドを呼び出すことで、これを実現しています。ただし、これにより、古いビューが削除されて新しいビューが追加されるため、回転時にビューがちらつきます。
したがって、自動レイアウトまたはストラットとスプリングを使用する必要があることはわかっており、後者を使用したいと考えています。Interface Builder を使用してストラットとスプリングを設定する方法は知っていますが、私が取り組んでいるプロジェクトではペン先やストーリーボードを使用していません。
コレクションビューを作成するための私の方法は次のとおりです(viewDidLoadで呼び出されます)。これには、動作していないコードが含まれます。
- (void)sceneSetup
{
CGFloat cvWidth;
CGFloat cvHeight;
if ([self getCurrentInterfaceOrientation] || [self getCurrentDeviceOrientation]) {
self.orientationIsLandscape = YES;
cvWidth = 1024;
cvHeight = 768;
} else {
self.orientationIsLandscape = NO;
cvWidth = 768;
cvHeight = 1024;
}
EmailsLayout *layout = [[EmailsLayout alloc]init];
[layout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
self.emailsCollectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 0, cvWidth, cvHeight) collectionViewLayout:layout];
//here is my attempt to programmatically set struts and springs
self.view.autoresizesSubviews = YES;
self.emailsCollectionView.autoresizingMask = (UIViewAutoresizingFlexibleWidth &
UIViewAutoresizingFlexibleHeight & UIViewAutoresizingFlexibleLeftMargin &
UIViewAutoresizingFlexibleRightMargin & UIViewAutoresizingFlexibleTopMargin &
UIViewAutoresizingFlexibleBottomMargin);
self.emailsCollectionView.dataSource = self;
self.emailsCollectionView.delegate = self;
[self.emailsCollectionView setScrollEnabled:YES];
self.emailsCollectionView.userInteractionEnabled = YES;
self.emailsCollectionView.pagingEnabled = YES;
self.emailsCollectionView.backgroundColor = UIColorFromRGB(0x262d32);
[self.emailsCollectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:cellIdentifierEmails];
[self.emailsCollectionView reloadData];
[self.view addSubview:self.emailsCollectionView];
}
私が間違っているのかわかりません。どんな助けでも大歓迎です。