【微博-计算Cell子控件的frame Objective-C语言】

iOS开发:计算UITableViewCell中子视图的frame
在iOS开发中,设置UITableViewCell时,通常需要计算并设置子视图的frame。文章详细讲解了如何根据模型数据动态设置头像、昵称、会员图标、正文和配图的frame,包括计算文字的大小、处理配图的显示和隐藏,以及处理单元格重用时的数据更新。此外,还介绍了如何根据文字内容动态计算UILabel的高度,并封装了一个计算文字大小的方法。

一、计算Cell子控件的frame

计算

1.来,看一下,刚才我们已经做到把这个模型设置给自定义的cell了吧,

那么,在这个自定义Cell里面呢,我们是不是要开始设置数据了,

设置数据,我们,设置数据,其实很简单,就是把我们这里边的每一个控件,对应的值,从模型里面取出来,给了它,是不是就OK了,

设置数据

2.第一个,我们设置的是这个头像,

头像

头像,我们找到self.imgView……,里面有一个叫做什么,Icon吧,

设置

self.imgViewIcon,这是头像吧,

“点”image,

self.imgViewIcon.image

属性

self.imgViewIcon.image = [UIImage imageNamed:

拿到模型

这个地方,是不是要拿到模型,

3.我们这里模型,可以怎么拿,可以self.weibos,

来,我们把这个取出来吧,把这个取出来,注意看,

CZWeibo,

模型

CZWeibo *model = self.weibo;

这样

这样的话, 这个是不是就是那个模型,

模型

这里就等于我们这个模型"点"icon,

模型

为什么这里“点”不出来呢,因为我们这里,缺一个啥,

缺一个啥

是不是缺一个头文件啊,

头文件

它是不是变色了,

变色

这样的话,设置头像,

1)头像数据,设置好了,

就这么一句话,

2)OK,接下来,设置昵称,

self.lblNickName.text = model.name;

昵称

这是设置昵称,

3)设置会员,

注意,这个会员,有点儿不一样,

只要你是会员,头像是不是都是这个头像啊,

会员图标,是不是都是这个黄色,皇冠的这个图标,

会员图标,都是一样的,所以说,

所以说

不会说,你,比如说,头像,第一个人,头像是这个,第二个人,头像是这个,第三个人,头像是另外一个,每个人头像,是不是都可能不一样啊,

但是,会员图标,所有的人,只要是会员,图标是一样的,明白,

所以说,设置会员头像,这个数据,没有必要写在这里,

会员

为什么呢,注意听,如果说,你把设置会员那个图标,那句话,写在这个setting方法里面,这个setting方法,在哪里调,

是不是在这个设置微博属性

设置

是不是在这个设置微博属性这个方法里面调,

这个设置微博属性,set方法,这儿在哪儿调,

是不是这了去调用,

这里

在这里调用话,每次调一次,就会重新设置一次这个会员的图标,

但是,会员图标,有必要每次都重新设置吗,

设置

设置一次,是不是就够了,

反正都是一样的,

所以说,这句话,

这句话

这句话,没有必要,设置会员图标,没有必要放在这儿,

而是,可以放哪儿,,

在创建会员

创建

在创建会员头像的时候,在创建的时候,直接在这里,

在这里

imgViewVip.image = [UIImage imageNamed:@“vip”];

这儿直接写死,vip,

vip

就这么,在这里,写一次,就可以了,

创建控件的时候,直接设置一次头像是vip,

接下来,在设置数据这个地方,

会员

你只要根据它是不是vip,判断是否应该显示这个图标,就OK了,

明白,这里不需要就是动态每次都设置它的图片,

不需要,设置一次就够了,

如果,

如果

如果,model.isVip

vip

如果它是会员,我就让

self.imgViewVip.hidden = NO;

如果是会员,就不隐藏,是不是就显示啊,

隐藏

else {

//如果它不是会员呢,

//如果它不是会员,是不是就让它隐藏吧,

self.imgViewVip.hidden = YES;

}

就让它隐藏,

会员

这就是设置会员头像是否显示,

注意,这个地方一定要这样写,一定要if——else,两个都写上,

因为,我们这里向上滚动的时候,

滚动

向上滚动的时候,这个Cell,等会儿要重用这个Cell啊,

Cell重用的时候,假如说,把第一个单元格,把第一行滚出去了,

然后呢,最后一行要滚进来一个,第一行,滚出去的是一个会员,滚进来的是一个不是会员,那么你这个不是会员的这个人,如果用了这个是会员的这个Cell,重用了这个Cell,这个时候,这个Cell,默认是皇冠,

就会把那个不是会员的皇冠,这儿默认也显示出来了,

所以说,对于每一条数据,在这里都要判断一下,

判断

如果是会员,就显示,如果不是会员,就隐藏啊,

所以说,每一个单元格,设置的时候,都要重新判断一下,不然的话,在单元格重用的时候,就会造成你用了别人的单元格,别人那个图片,显示到你这儿来了,

4)正文,怎么设置,

self.lblText.text = model.text;

正文

5)配图

配图,我们这里,也得判断一下,

如果说,这个人,比如说,你看,

配图

如果说,这个人,有配图,

是不是就设置一下,配图,

同时让配图显示出来,

如果这个人就没有配图,

还有必要去设置一下吗,

同时是不是还得把这个配图隐藏啊,

对吧,所以这儿也要做一下判断,

也是得根据,有配图,还是没配图,

要做一个判断,

有人说,这个头像,为什么不做判断,有头像、没头像,

废话,头像都有吧……

昵称为什么不做判断,有昵称、没昵称,

昵称是不是也都有,

这些都有,

昵称颜色,那时候咱们再看,

好,配图,怎么判断,

if (model.picture){

//如果,当前这个模型,“点”picture,如果要是没有配图,是不是就是nil啊,如果要是nil,就表示没有配图,如果不是nil,就是YES,就表示有配图吧,

配图

//如果有配图

//如果没有配图,就是nil,nil的话,就不执行if语句了,

//如果有配图,就不是nil,不是nil的话,才执行if语句,

//如果有配图,让self.imgViewPicture.image = [UIImage imageNamed:model.picture],是不是这么来设置一下,

self.imgViewPicture.image = [UIImage imageNamed:model.picture];

//注意啊,如果说,这个picture属性,是一个nil,

//如果是nil的话,直接写这句话,你把nil传进来,这句话是不是报错的,

报错

//你读取一个空的一个图片的名称,这句话是不是会报异常,

//所以说,为了这个异常,你这儿也得判断一下啊,

//如果model.picture的值是nil,那么下面这句话执行会报异常

报异常

//所以这儿,我们得判断一下,

//同时,是不是还要把那个图片显示出来,

//显示图片框,

self.imgViewPicture.hidden = NO;

NO

//self.imgViewPicture.hidden = NO,这个图片框,是不是显示出来了,

} else {

//else,如果要是没有配图,没有配图,注意听,

//既然就没有配图,你还需要设置什么东西吗,

//不需要,但是如果没有配图,这个图片框还能显示出来吗,

//是不是隐藏掉吧,

//隐藏图片框

self.imgViewPicture.hidden = YES;

}

配图

有人说,你都没配图,你隐藏它干啥了,没配图,不隐藏它,也行吗,

如果说,你就是一个新创建的一个Cell,刚刚创建那个Cell,

你没有配图,图片框是不是没有东西,

是不是什么都显示不出来,

也没事儿,

还是,如果说,你要重用上一个单元格的Cell,

这个时候,上一个单元格,它是有配图的,

你重用了上一个单元格,如果你这里没有配图,你如果要不让它隐藏的话,上一个单元格里面,图片框里面,是不是原来有图片,你如果不隐藏,是不是直接给你显示出来了,

这就是当我们进行单元格重用的时候,一定要注意,把原来单元格的那些可能会影响你的数据,是不是都给它设置一下啊,

明白吧,重用别人的东西,一定要干干净净、干干净净,

好,所以说,这里,如果要是没有配图,那么就隐藏图片框,

//如果没有配图,隐藏图片框,

self.imgViewPicture.hidden = YES;

好,这样的话,把我们的数据设置好了,

现在,我们在这个settingData

settingData

现在,在我们这个settingData方法里面,

在这个settingData方法里面,把我们所有的这些控件,数据设置好了,

数据设置好了

设置好数据以后,接下来,在settingFrame里面,我们是不是一个一个要设置它们的什么,设置一个frame,坐标吧,

settingFrame

四、来,我们设置一下这个坐标,

1.设置这个坐标,相对来说,就比较烦人了,

坐标

咱们现在一起来设置一下坐标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风清晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值