一对一直播系统源码,UICollectionViewCell自适应文字宽度
一对一直播系统源码,UICollectionViewCell自适应文字宽度实现的相关代码
自定义cell
1 | #pragma mark — 自定义cell<br> <br># import "SelfSizingCollectCell.h" <br># import "Masonry.h" <br>#define itemHeight 60 <br> @implementation SelfSizingCollectCell<br>- (instancetype)initWithFrame:(CGRect)frame{<br> self = [ super initWithFrame:frame];<br> if (self) {<br> self.contentView.backgroundColor = [UIColor redColor];<br> // 用约束来初始化控件:<br> self.textLabel = [[UILabel alloc] init];<br> self.textLabel.textAlignment =NSTextAlignmentCenter;<br> self.textLabel.backgroundColor = [UIColor greenColor];<br> [self.contentView addSubview:self.textLabel];<br>#pragma mark — 如果使用CGRectMake来布局,是需要在preferredLayoutAttributesFittingAttributes方法中去修改textlabel的frame的<br> // self.textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, 30)];<br> <br>#pragma mark — 如果使用约束来布局,则无需在preferredLayoutAttributesFittingAttributes方法中去修改cell上的子控件l的frame<br> [self.textLabel mas_makeConstraints:^(MASConstraintMaker *make) {<br> // make 代表约束:<br> make.top.equalTo(self.contentView).with.offset(0);<br> make.left.equalTo(self.contentView).with.offset(0);<br> make.height.equalTo(@(itemHeight/2));<br> make.right.equalTo(self.contentView).with.offset(0);<br> }];<br> } <br> return self;<br>}<br>#pragma mark — 实现自适应文字宽度的关键步骤:item的layoutAttributes<br>- (UICollectionViewLayoutAttributes *)preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes{<br> <br> UICollectionViewLayoutAttributes *attributes = [super preferredLayoutAttributesFittingAttributes:layoutAttributes];<br> CGRect rect = [self.textLabel.text boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, itemHeight) options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesFontLeading | NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:14]} context:nil];<br> rect.size.width +=8;<br> rect.size.height+=8;<br> attributes.frame = rect;<br> return attributes;<br> <br>}<br>@end |
Controller中关键
1 | #pragma mark — 视图控制器中使用:(关键)<br>layout.estimatedItemSize = CGSizeMake( 20 , 60 ); // layout约束这边必须要用estimatedItemSize才能实现自适应,使用itemSzie无效<br>以上就是一对一直播系统源码,UICollectionViewCell自适应文字宽度实现的相关代码, 更多内容欢迎关注之后的文章 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现