iOS UICollectionViewCell的宽高自适应

大神,请教下,iOS UICollectionViewCell的宽高自适应
最新回答
清茶

2021-10-16 13:44:45

    最近开发用到UICollectionView,需求是横向滑动,根据服务端传过来的数据,确定cell数量,以及根据每条数据的大小确定cell的宽度,点击的cell高亮显示。

    使用代理方法

```Objective-c

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

```

    当拿到数据模型的时候,即利用该模型的计算方法直接计算文本宽度,并赋值给数据模型的width属性,在上面的代理方法中,宽度直接返回model.witdh,return CGSizeMake{self.dataSource[indexPath.row].width, height}。//高度一样如果需要自适应也可利用此方法。

```Objective-c

- (CGSize)collectionView:(nonnullUICollectionView*)collectionView layout:(nonnullUICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(nonnullNSIndexPath*)indexPath

{

if(self.dataSource) {

Model *model = (Model*)self.dataSource[indexPath.row];

returnCGSizeMake(model.width,28);

}else{

returnCGSizeMake(0,0);

}

}

```

    根据字符串计算出他应该占据的宽度,需要两个参数,该字符串和想设置的字号大小,在此不再赘述。

```Objective-c

- (NSInteger)calculateWidth:(NSString*)routeDesc

{

CGSizesize = [routeDesc sizeWithFont:font];

returnsize.width+15;// +15两边留间距

}

- (CGSize)sizeWithFont:(UIFont*)font

{

if(self.length==0)

{

returnCGSizeZero;

}

NSDictionary* attrDic = [NSDictionarydictionaryWithObjectsAndKeys:font,NSFontAttributeName,nil];

CGSizesize = [selfsizeWithAttributes:attrDic];//sizeWithAttributes is the default suggested replace method for selector(sizeWithFont:)

returnsize;

}

```

    高亮选择根据model的isSelect属性判断文本以及cell边框的颜色(为yes时是绿色,其他情况灰色),并在bindModel给cell绑定数据的方法中进行设置。

    小结:自定义的UICollectionViewCell,实例方法必须实现initWithFrame,在设置该cell的边框颜色才会有效,如果只实现init方法的话,设置cell.contentView的border之类的属性不会有效。