いろいろいじった後、UICollectionViewFlowLayout のスペーシング コードにバグがあるのではないかと疑い始めました。
問題は単純です。画面に表示したいボタンが 5 つあり、ボタン間の間隔を 1 pt (Retina ディスプレイでは 2 ピクセル) にしたいのです。これを実現するために、minimumInteritemSpacing を 1.0 に設定し、セル幅を 159.5 pt に設定して、2 つのセルの合計が 319 pt になり、スペースに 1 つのポイントが残るようにしました。最小値を 1.0 に保つように指示されているにもかかわらず、フロー レイアウトによって間隔が 0.5 pt になるため、3 番目のボタンをビューの全幅にしたい場合に問題が発生します。(スクリーンショット 1 を参照)
間隔を設定するためのコードは、
-(void)viewDidLoad
{
UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *)[[self collectionView] collectionViewLayout];
[flowLayout setMinimumInteritemSpacing:1.0];
[flowLayout setMinimumLineSpacing:1.0];
}
セルのサイジング
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == 2) {
return CGSizeMake(320 ,151);
}
return CGSizeMake(159.5, 151);
}
一方、3 番目のボタンを全幅にしないと、間隔は期待どおりに動作しますが、別の行のアイテム間の間隔には影響しません。(スクリーンショット 2)
CollectionView、CollectionViewCell、および UILabel がストーリーボードに設定されており、スクリーンショットに表示されているラベルのフレームがセルの幅よりも小さいことを既に確認しており、ラベルを完全に削除しようとしたことにも注意してください。同じ結果で。
フロー レイアウト コードのバグでない限り、なぜこれが起こっているのかわかりません。これをバグとして送信する前に、ここでサニティ チェックを探していました。