</pre>关于自动布局的使用在项目开发中的确方便了许多。常用的模式有:<p></p><p>1.存代码自动布局,常利用第三方mansory,这个网上介绍比较多,这里就不在累述;</p><p>2.在Storyboard里自动布局,添加约束;</p><p></p><p>对于第二种方法,使用起来的确很方便,但是对于UITableViewCell使用起来就不会那样直接。如果你采用自定义Cell,可以在XIB文件里对添加的子控件直接添加约数,这个没问题,可以实现自动布局。但是对于Cell的高度的自适应,这种方法就办不到了。那该怎么办呢?往下读,我告述你</p><p></p><p>首先你要明确项目适用的版本系统,如果是iOS 8后,恭喜你,不用太麻烦。两行代码搞定Cell高度的自适应。</p><p></p><pre name="code" class="objc"> self.tableView.estimatedRowHeight = 50;
self.tableView.rowHeight = UITableViewAutomaticDimension;
如果你的版本要适应iOS 7以后,那么就要多做些工作了。
首先,你要对UItableView的delegate的方法
-(CGFloat)tableView:( UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"2");
return 50.f;
}
-(CGFloat)tableView:( UITableView *)tableView heightForRowAtIndexPath:( NSIndexPath *)indexPath{
NSLog(@"1");
StatusCell *cell = [tableView dequeueReusableCellWithIdentifier:@"statusCell" ];
//绑定内容然后才能计算高度
[cell bandingStatusInfo: self. statuses[indexPath. row]];
//当前视图,根据设置的 layout,最佳显示需要的 size
CGSize size = [cell. contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize ];
NSLog(@"%f", size. height + 1);
return size.height + 1;
}
然后在Cell的类里添加计算Cell高度;
.h文件
-(void)bandingStatusInfo:( QYStatus *)info;
.m文件
-(void)bandingStatusInfo:( QYStatus *)info{
//第三 SDK image
[self.icon sd_setImageWithURL:[ NSURL URLWithString:info.user .profileImageUrl ]];
self.name.text = info.user.name;
self.time.text = info.createdString;
self.source.text = info.source;
self.content.text = info.text;
QYStatus *reTwitter = info. retweetedStatus;
if (reTwitter) {
//不显示正文图片 ,清空内容
[self layoutImage:nil forSuperView:self.imageSuperView constant: self. imageConstraint];
} else{
//布局微博图片
[self layoutImage:info. picUrls forSuperView: self. imageSuperView constant:self .imageConstraint ];
}
self.reTwitterLabel. text = reTwitter. text;
[self layoutImage:reTwitter. picUrls forSuperView: self. reImageSuperView constant:self .reImageConstraint ];
}
//布局图片
-(void)layoutImage:( NSArray *)picUrls forSuperView:( UIView *)supView constant:(NSLayoutConstraint *)constr{
//参数是:所布局的图片,图片的父视图,高度上的约束
//移除父视图上的子视图
NSArray *subs = supView. subviews;
// 对数组中的每一个对象执行指定的方法
[subs makeObjectsPerformSelector: @selector(removeFromSuperview)];
//更改高度跟图片的张数
NSInteger height = [ self imageContentViewHeight4PicURls:picUrls];
constr.constant = height;
}
//计算图片显示需要的高度
(CGFloat)imageContentViewHeight4PicURls:( NSArray *)picUrls{
if (picUrls.count == 0) {
return 0;
}
//图片的张数
NSInteger imageCount = picUrls. count;
//图片显示需要的行数
NSInteger line = (imageCount - 1)/ 3 + 1;
//高度
NSInteger imageHeight = line * kImageHeight + (line - 1) * kImageEdge;
return imageHeight;
}
这样就可以实现cell的高度自适应。
这里只是添加了对图片高度的计算,有可能添加的插件为Lable,行数为0,自适应行数。同理,只需要计算出lable的高度,并把计算后的高度传给cell就可以了。