在开发中,遇到一个tableViewCell嵌套UICollectionView的布局,在同时设置了UICollectionView的高度和itemSize后一直报一个错误
The relevant UICollectionViewFlowLayout instance is ...xxxxx
原因是同一个float值给NSLayoutConstraint
后渲染出来的frame是自动取整了,而itemSize则没有取整,只要使用nearbyintf
将值取整后再赋值给约束和item就好了
@interface xxxTableViewCell() <UICollectionViewDataSource,UICollectionViewDelegate>
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *collectionViewHeightConstraint;
@property (weak, nonatomic) IBOutlet UICollectionView *collectionView;
@end
@implementation xxxTableViewCell
- (void)awakeFromNib {
[super awakeFromNib];
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
layout.sectionInset = UIEdgeInsetsZero;
layout.minimumInteritemSpacing = 0.0;
layout.minimumLineSpacing = 10;
[self.collectionView setDataSource:self];
[self.collectionView setDelegate:self];
[self.collectionView setCollectionViewLayout:layout];
[self.collectionView setContentInset:UIEdgeInsetsMake(0, 20, 0, 0)];
[self.collectionView registerNib:[UINib nibWithNibName:@"xxxx" bundle:nil] forCellWithReuseIdentifier:@"xxx"];
self.collectionView.scrollEnabled = YES;
self.collectionViewHeightConstraint.constant = self.collectinoViewHeight;
}
- (CGFloat)collectinoViewHeight {
CGFloat realHeight = xxxx;
return nearbyintf(realHeight);
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return CGSizeMake(100, self.collectinoViewHeight);
}
@end
常见取整函数
ceilf
: 向上取整,50.1 -> 51, 50.9 -> 51
floorf
:向下取整,50.1 -> 50, 50.9 -> 50
nearbyintf
:四舍五入取整:50.1 -> 50, 50.9 -> 51
网友评论