问题重现
- 项目中需要一个日历控件,虽然有第三方的库。奈何与业务有些不符合,修改起来又比较困难。就自己用collectionView画了一个。但是,就当我把用屏幕的宽7等分,结果就出现了问题。
- 发现cell 的宽和屏幕并不是像我们想象的那样,出现了问题。如下图:
解决办法
- 直接上代码
- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
//viewWillLayoutSubviews 会调用很多次,为了减少不必要的布局,使用self.isNeedLayout
if (!self.isNeedLayout) {
self.collectionView.frame = CGRectMake(0, 30, kDeviceWidth, kDeviceHeight - 64 - 30);
// cellWidth
NSInteger collectionContentWidth = kDeviceWidth - param.contentInsets.left - param.contentInsets.right;
NSInteger residue = collectionContentWidth % 7;
CGFloat cellWidth = collectionContentWidth / 7.0;
if (residue != 0) {
CGFloat newPadding;
if (residue > 7.0 / 2) {
newPadding = param.contentInsets.left - (7 - residue) / 2.0;
cellWidth = (collectionContentWidth + 7 - residue) / 7.0;
} else {
newPadding = param.contentInsets.left + (residue / 2.0);
cellWidth = (collectionContentWidth - residue) / 7.0;
}
UIEdgeInsets inset = UIEdgeInsetsMake(param.contentInsets.top, newPadding, param.contentInsets.bottom, newPadding);
param.contentInsets = inset;
}
self.collectionView.contentInset = param.contentInsets;
UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout;
layout.itemSize = CGSizeMake(cellWidth, (int)(cellWidth * 5/4));
self.collectionView.collectionViewLayout = layout;
self.isNeedLayout = YES;
}
}
解决后的样式
一盏灯, 一片昏黄;一简书, 一杯淡茶。 守着那一份淡定, 品读属于自己的寂寞。 保持淡定, 才能欣赏到最美丽的风景! 保持淡定, 人生从此不再寂寞。