1

いろいろいじった後、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 がストーリーボードに設定されており、スクリーンショットに表示されているラベルのフレームがセルの幅よりも小さいことを既に確認しており、ラベルを完全に削除しようとしたことにも注意してください。同じ結果で。

フロー レイアウト コードのバグでない限り、なぜこれが起こっているのかわかりません。これをバグとして送信する前に、ここでサニティ チェックを探していました。

4

2 に答える 2