关于UItableViewCell的自动

本文介绍如何在 iOS 开发中实现 UITableViewCell 的自动布局及高度自适应。适用于 iOS 8 及以上版本,通过设置 UITableView 的 estimatedRowHeight 和 rowHeight 属性简化自适应过程。对于 iOS 7 及以上版本,需重写 tableView 的 heightForRowAtIndexPath 方法来计算 Cell 的实际高度。
摘要由CSDN通过智能技术生成

</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就可以了。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值