关于自定义tableviewcell的注意点以及用到的几个比较有用的函数

自定义组件时可以先将新建任务、除了位置以及组件内容的其他类型初始化放在初始化的函数中,先不指定其具体位置以及组件内容。。

比如:

- (void) initSubView{
	//头像
    _avatar = [[UIImageView alloc]init];
    [self addSubview:_avatar];
    //用户名
    _userName = [[UILabel alloc]init];
    _userName.textColor = WBStatusGrayColor;
    _userName.font = WBStatusCellUserNameFont;
    [self addSubview:_userName];
}

自定义cell都应该有个数据模型的变量,根据其数据用来初始化自定义组件的位置与内容。比如我这里自定义的一个数据模型类变量。

@property (nonatomic, strong)WeiboMsg *weiboMsg;

然后自定义cell的各个组件有关于数据的初始化任务就放在设置weiboMsg数据的函数中。

- (void)setWeiboMsg:(WeiboMsg *)weiboMsg{
    //初始化 - 头像
    CGRect avatarRect = CGRectMake(10, 10, WBStatusCellAvatarWidth, WBStatusCellAvatarHeight);
    _avatar.image = [UIImage imageNamed:weiboMsg.profileAvatarUrl];
    _avatar.frame = avatarRect;
    //初始化 - 用户名
    CGFloat userNameX = CGRectGetMaxX(_avatar.frame) + WBStatusCellControlSpacing;
    CGFloat userNameY = userNameX;
    CGSize userNameSize = [weiboMsg.userName sizeWithAttributes:@{NSFontAttributeName: WBStatusCellUserNameFont}];
    CGFloat userNameSizeX = userNameSize.width;
    CGFloat userNameSizeY = userNameSize.height;
    CGRect userNameRect = CGRectMake(userNameX, userNameY, userNameSizeX, userNameSizeY);
    _userName.text = weiboMsg.userName;
	_userName.frame = userNameRect;
}

对于不确定高度的cell来说有两个解决方法:

一是在cell中定义一个保存高度的变量,在VC创建cell的时候根据其来解决高度问题;

二是直接在VC创建cell并指定cell高度的时候动态计算cell的高度来解决。


在自定义cell的时候我觉得有几个函数值得注意也是比较常用的。
1、_wbDetail.numberOfLines = 0;
这里指定微博详细内容的行数为0.默认情况下UILable的行数为1,指定为0则是代表没有限制行数。
2、CGRectGetMaxX(_avatar.frame)与CGRectGetMaxY(_avatar.frame);
这两个函数一个是获取指定控件坐标中X的最大值(最右边位置)以及获取指定控件的Y的最大值(最下边位置);因为在自定义Cell中很多控件的具体位置是不确定的。

3、动态计算UILabel中文字的占高:

首先UILabel的numberOfLines设置为0

CGSize wbDetailSize = [weiboMsg.wbDetail 
boundingRectWithSize:CGSizeMake(wbDetailWidth, MAXFLOAT) 
options:NSStringDrawingUsesLineFragmentOrigin 
attributes:@{NSFontAttributeName:WBStatusCellDetailFont} 
context:nil].size;


这个函数主要是根据weiboMsg传递来的wbDetail的字符串长度、指定字体以及字体大小来构建这些文字应该占用的大小。即用来计算多行文字的UILable的高度或宽度。
如果想得到宽度的话,size的width应该设为MAXFLOAT
如果想的到高度的话,size的hight应该设为MAXFLOAT
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值