iOS-UI控件之UITableView(三)- 自定义不等高的cell

Storyboard_不等高

对比自定义等高cell,需要几个额外的步骤(iOS8开始才支持)

  • 添加子控件和contentView之间的间距约束
  • 设置tableViewCell的真实行高和估算行高
// 告诉tableView所有cell的真实高度是自动计算(根据设置的约束来计算)
self.tableView.rowHeight = UITableViewAutomaticDimension;
// 告诉tableView所有cell的估算高度
self.tableView.estimatedRowHeight = 44;
  • 改变cell高度,只需要改变约束的值。

如果要支持iOS8之前

  • 如果cell内部有自动换行的label,需要设置preferredMaxLayoutWidth属性
- (void)awakeFromNib
{
    // 手动设置文字的最大宽度(目的是:让label知道自己文字的最大宽度,进而能够计算出自己的frame)
    self.text_label.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 20;
}
  • 设置tableView的cell估算高度
// 告诉tableView所有cell的估算高度(设置了估算高度,就可以减少tableView:heightForRowAtIndexPath:方法的调用次数)
self.tableView.estimatedRowHeight = 200;
  • 在代理方法中计算cell的高度
XMGStatusCell *cell;
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 创建一个cell(cell的作用:根据模型数据布局所有的子控件,进而计算出cell的高度)
    if (!cell) {
        cell = [tableView dequeueReusableCellWithIdentifier:ID];
    }

    // 设置模型数据
    cell.status = self.statuses[indexPath.row];

    return cell.height;
}

- (CGFloat)height
{
    // 强制布局cell内部的所有子控件(label根据文字多少计算出自己最真实的尺寸)
    [self layoutIfNeeded];

    // 计算cell的高度
    if (self.status.picture) {
        return CGRectGetMaxY(self.pictureImageView.frame) + 10;
    } else {
        return CGRectGetMaxY(self.text_label.frame) + 10;
    }
}
时间: 2024-08-03 10:48:12

iOS-UI控件之UITableView(三)- 自定义不等高的cell的相关文章

iOS UI控件7(UITableView)

1.表格(UITableView)与表格控制器(UITableViewController) UITableView是iOS开发中常见的UI控件,本质是一个列表(单列的表格).UITableView允许自由控制行的控件,包括在表格行中添加多个字控件.UITableView继承了UIScrollView,具有UIScrollView的功能,这个UIScrollView主要封装了UITableViewCell单元格控件,因此UITableView默认可以对单元格进行滚动.默认情况下,所有UITabl

IOS Ui控件 修改位置和尺寸,代码添加控件

所有的UI控件最终都继承自UIView,UI控件的公共属性都定义在UIView中, UIView的常见属性 UIView *superview; 获得自己的父控件对象 NSArray *subviews; 获得自己的所有子控件对象 NSInteger tag; 控件的ID(标识),父控件可以通过tag来找到对应的子控件 CGAffineTransform transform; 控件的形变属性(可以设置旋转角度.比例缩放.平移等属性) CGRect frame; 控件所在矩形框在父控件中的位置和尺

iOS UI控件6

1.微调器(UIStepper) iOS5 新增UI,包含 +.-两个按钮,继承了UIControl 支持的属性: Value Minimum Maximum Current Step Behavior Autorepeat 按住 加号 不松手,数字会持续变化 Continuous 为YES时,用户交互会立即出发ValueChanged事件,NO 表示只有等用户交互结束才出发ValueChanged事件 Wrap 若为YES,value加到超过Maximum值时,会变成Min指. 设置自定义外观

iOS UI控件没有显示时的调试技巧

1.遇到UI控件没有显示的问题,可以给这个控件设置背景色 假设这个控件是UIBUtton 如果背景色能显示,那问题就出在image和title值为空 如果背景色不能显示,重写控件的description方法,把控件的frame打印出来分析 2.以下是打印UIView的frame的分类 #import <UIKit/UIKit.h> @interface UIView (Log) @end 1 #import "UIView+Log.h" 2 3 @implementatio

iOS-UI控件之UITableView(二)- 自定义不等高的cell

不等高的cell 给模型增加frame数据 所有子控件的frame cell的高度 @interface XMGStatus : NSObject /**** 文字\图片数据 ****/ // ..... /**** frame数据 ****/ /** 头像的frame */ @property (nonatomic, assign) CGRect iconFrame; // ..... /** cell的高度 */ @property (nonatomic, assign) CGFloat c

ios UI控件的简单整理

把该文件复制到.m文件里就能够方便的查找 /** 匿名类目:可以声明方法和变量,属性为private(不允许在外部调用,且不能被继承 */ /** 发送数据的委托方,接收数据的时代理发(即代理的反向传值) 委托方第一步:声明协议 委托方第二步:声明代理指针 委托方第三步:操作完成,告诉代理(即调用代理的方法) 代理第一步:遵守协议 代理第二步:成为代理 代理第三步:实现协议方法 */ // %zd %zi 表示NSInteger // %g 表示数字去掉尾零 //代码块路径 /Users/ms/

Android Material Design新UI控件使用大全 三

序言 在我们对NavigationView侧滑,TextInputLayout输入框,Snackbar弹出提示框,FloatingActionBar圆形button,TabLayout顶部导航栏及CoordinatorLayout有了一定的了解后,我们最后将对AppBarLayout,CollapsingToolbarLayout进行最后的分析,我们先看两张效果图,(因为暂时没找到好的方法来录制gif,先借用网上的图) AppBarLayout AppBarLayout 是继承LinerLayo

蓝懿 iOS UI控件

今天上课讲了一堆控件,主要有UIImageview,UIview,UIButton,UILable,UITextFiled,UITextview,包括进度条,缓冲圈开关的用法,比较难多是UIButton的一些显示状态的应用,还有UITextFiled的UITextFiledDeleGate协议,在协议中调用一些时间节点来实现想要的结果: 今天上课到现在脑子里一直充斥着各种控件的方法和属性的应用,每个控件都有很多中属性和方法,可以通过按command键然后在控件名上右击进去查看,如果要点用方法可以

UI控件之UITableView的协议方法

<UITableViewDataSource,UITableViewDelegate> //设置表视图的编辑状态 -(void)setEditing:(BOOL)editing animated:(BOOL)animated { [super setEditing:editing animated:animated]; [_tableView setEditing:editing animated:animated]; } //设置编辑模式(插入.删除.选择),默认是删除 -(UITableV