美文网首页
NSLayoutConstraint、ItemSize高度同时设

NSLayoutConstraint、ItemSize高度同时设

作者: 独孤流 | 来源:发表于2021-10-13 20:55 被阅读0次

在开发中,遇到一个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

相关文章

网友评论

      本文标题:NSLayoutConstraint、ItemSize高度同时设

      本文链接:https://www.haomeiwen.com/subject/vmpeoltx.html