因為手機視圖的放大和標準模式,屏幕寬度不同引起collectionView cell之間有間距。這個問題引起collectionView適配問題的解決方法貼在最后。
首先是判斷不同的模式:
CGRect bounds = [[UIScreen mainScreen] bounds];
NSString *screenMode = [[UIScreen mainScreen].coordinateSpace description];
CGFloat scale = [[UIScreen mainScreen] scale];
CGFloat nativeScale = [[UIScreen mainScreen] nativeScale];
NSLog(@"\n bounds: %@\n screen mode: %@\n scale: %f\n native scale: %f", NSStringFromCGRect(bounds), screenMode, scale, nativeScale);
iPhone6標準模式下輸出:
bounds: { {0, 0}, {375, 667} }
screen mode: <UIScreen: 0x155603cd0; bounds = { {0, 0}, {375, 667} }; mode = <UIScreenMode: 0x170021f40; size = 750.000000 x 1334.000000>>
scale: 2.000000
native scale: 2.000000
iPhone6放大模式下輸出:
bounds: { {0, 0}, {320, 568} }
screen mode: <UIScreen: 0x12ee03d40; bounds = { {0, 0}, {320, 568} }; mode = <UIScreenMode: 0x1700256e0; size = 640.000000 x 1136.000000>>
scale: 2.000000
native scale: 2.343750
iPhone6+標準模式下輸出:
bounds: { {0, 0}, {414, 736} }
screen mode: <UIScreen: 0x13ee01840; bounds = { {0, 0}, {414, 736} }; mode = <UIScreenMode: 0x17002b4e0; size = 1242.000000 x 2208.000000>>
scale: 3.000000
native scale: 2.608696
iPhone6+放大模式下輸出:
bounds: { {0, 0}, {375, 667} }
screen mode: <UIScreen: 0x13f6021f0; bounds = { {0, 0}, {375, 667} }; mode = <UIScreenMode: 0x170028c20; size = 1125.000000 x 2001.000000>>
scale: 3.000000
native scale: 2.880000
iPhone7標準模式下輸出:
bounds: {{0, 0}, {375, 667}}
screen mode: <UIScreen: 0x101700ef0; bounds = {{0, 0}, {375, 667}}; mode = <UIScreenMode: 0x170233120; size = 750.000000 x 1334.000000>>
scale: 2.000000
native scale: 2.000000
iPhone7放大模式下輸出:
bounds: {{0, 0}, {320, 568}}
screen mode: <UIScreen: 0x101906b50; bounds = {{0, 0}, {320, 568}}; mode = <UIScreenMode: 0x17023e920; size = 640.000000 x 1136.000000>>
scale: 2.000000
native scale: 2.343750
collectionView適配的解決方案:
首先這是網上,利用控件本身的方法來調節
應該是調節UICollectionViewFlowLayout的minimumInteritemSpacing屬性,
這個是調節同一行的cell之間的距離的。
使用-(CGFloat )collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section;
或直接設置layout.minimumInteritemSpacing = 0;
但還要配合cell的大小、section左右縮進,因為collectionView默認section左右縮進左右是0,然后cell的寬度小的話,因為要保持cell寬度不變,這樣cell之間還是有間隔。
用故事板拖一個collectionView,調一調很直觀
我在上面方法無效的情況下,想了一個笨辦法:
就是比如屏幕寬度為320,那么cell寬度為106,106,108
CGFloat ScreenWidth = 屏幕寬度;
CGFloat width = 0;
if ((indexPath.row % 3) == 0) {
width = (ScreenWidth - (int)(ScreenWidth/3.0) - (int)(ScreenWidth/3.0));
}else {
width = (int)(ScreenWidth/3.0);
}
CGFloat height = (int)(ScreenWidth/3.0);
CGSize cellSize = CGSizeMake(width, height);