重写LayoutSubViews设置cell子控件frame
问题描述:
当我们在iOS中实现带图片带列表显示时UITableViewCell中自带了一个存放图片的控件UIImageView,当我们获取的图片大小一致时,图片能够很整齐大显示,可是有些时候我们获取的列表图片的大小并不完全一致,为了保证界面的美观我们必须调整图片大小或位置,可是当我们在定义好的UITableViewCell对象中设置cell.imageView.bounds、cell.imageView.frame时发现无论设置什么值都无法改变图片的大小和位置。我们只能在继承至UITableViewCell的类中进行进行重写。
重定义一个uitableviewcell,它自动生成的代码不需要动,只要在.m文件中再加上下面的代码即可:
//重载layoutSubviews,对cell里面子控件frame进行设置
- (void)layoutSubviews {
[super layoutSubviews];
//更改图片位置、尺寸
self.imageView.bounds =CGRectMake(0,0,44,44);
self.imageView.frame =CGRectMake(15,10,44,44);
self.imageView.contentMode =UIViewContentModeScaleAspectFill;
//更改标题frame
CGRect tmpFrame = self.textLabel.frame;
tmpFrame.origin.x = 44+15+10;
self.textLabel.frame = tmpFrame;
//更改详细说明frame
tmpFrame = self.detailTextLabel.frame;
tmpFrame.origin.x = 44+15+10;
self.detailTextLabel.frame = tmpFrame;
//更改分隔线frame
[self setSeparatorInset:UIEdgeInsetsMake(15, 43, screenWith, 1)];
}
实例2:
@implementation MerchantSearchSelect_img_Cell
- (void)layoutSubviews{
[super layoutSubviews];
int addX = _node.nodeLevel*25; //根据节点所在的层次计算平移距离
// CGRect imgFrame = _iconView.frame;
// imgFrame.origin.x = 14 + addX;
// _iconView.frame = imgFrame;
self.imageView.x = self.imageView.x + addX;
// CGRect nameFrame = _contextLabel.frame;
// nameFrame.origin.x = 62 + addX;
// _contextLabel.frame = nameFrame;
self.textLabel.x = self.textLabel.x + addX;
}
创建cell后,别忘了加重绘:
[cell setNeedsLayout];//重绘