SB CelliOS点点滴滴iOS 日常学习

重写LayoutSubViews设置cell子控件frame

2015-10-28  本文已影响4814人  然亦伞

问题描述:

当我们在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];//重绘

上一篇下一篇

猜你喜欢

热点阅读