我想根据屏幕宽度设置UICollectionViewCell
的宽度。当它处于纵向模式时,我想显示3个细胞,如果是横向,我想要显示4个细胞。
我也希望在单元格之间有一些填充,但下面的代码对我没有帮助:
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
return UIEdgeInsetsMake(20, 20, 0, 20);
}
我认为它应该在单元格的顶部,左侧和右侧添加填充。
如果我看到肖像模式,那么:
***cell*** *padding* ***cell*** *padding* ***cell***
如果是风景:
***cell*** *padding* ***cell*** *padding* ***cell*** *padding* ***cell***
因此填充应该每次都有不同方向的相同大小。
假设它应该是20pt
此外,我想在每个单元格上方添加20 pt填充。
我应该编写一些自定义流程布局吗?
答案 0 :(得分:1)
对于Swift 3:
将此代码放入viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
let itemSize = UIScreen.main.bounds.width/3 - 2
let layout = UICollectionViewFlowLayout()
layout.itemSize = CGSize(width: itemSize, height: itemSize)
layout.minimumInteritemSpacing = 2
layout.minimumLineSpacing = 2
picCollectionView.collectionViewLayout = layout
}
跨越的列数将随设备方向自动更改
您可以通过更改minimumInteritemSpacing和minimumLineSpacing来调整填充
希望这有帮助!
答案 1 :(得分:0)
当方向/尺寸类改变时,您应该使布局无效:
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
[super traitCollectionDidChange:previousTraitCollection];
if (self.traitCollection.horizontalSizeClass != previousTraitCollection.horizontalSizeClass) {
[self.collectionView.collectionViewLayout invalidateLayout];
}
}
然后适当调整您在collectionView:layout:insetForSectionAtIndex:
中返回的值(我在这里选择了随机值):
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
if (self.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassCompact) {
return UIEdgeInsetsMake(20, 20, 0, 20);
} else {
return UIEdgeInsetsMake(40, 40, 0, 40);
}
}