思路
只要itemSize的width的小数点后的值等于1 / [UIScreen mainScreen].scale的值或者是其倍数即可。
实现代码
- (void)viewDidLoad {
[super viewDidLoad];
CGFloat scale = 1.0/([UIScreen mainScreen].scale);
CGFloat space = scale;
CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
CGFloat screenHeight= [UIScreen mainScreen].bounds.size.height;
CGFloat column = 4;//多少列
//实际屏幕宽度算的cell宽度
CGFloat orignalItemWidth = (screenWidth-(column-1)*space)/column;
//根据屏幕缩放率算出cell宽度并进行调整
CGFloat resultItemwidth = floor(orignalItemWidth)+scale;
if (resultItemwidth<orignalItemWidth) {
resultItemwidth += scale;
}
//最终一行所有cell加space的实际宽度
CGFloat resultTotalWidth = resultItemwidth*column+space*(column-1);
self.automaticallyAdjustsScrollViewInsets = YES;
UICollectionViewFlowLayout * flowLayout = [[UICollectionViewFlowLayout alloc] init];
flowLayout.itemSize = CGSizeMake(resultItemwidth, resultItemwidth);
flowLayout.minimumLineSpacing = space;
flowLayout.minimumInteritemSpacing = space;
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, resultTotalWidth, screenHeight) collectionViewLayout:flowLayout];
_collectionView.backgroundColor = [UIColor whiteColor];
[_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
_collectionView.delegate = self;
_collectionView.dataSource = self;
[self.view addSubview:_collectionView];
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return 20;
}
- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
cell.backgroundColor = [UIColor redColor];
return cell;
}
参考连接: