<h1 id="toc_0">自定义不等高cell</h1>
<h1 id="toc_1">自定义不等高cell(纯代码)</h1>
<h2 id="toc_2">给模型增加frame数据</h2>
<ul>
<li>所有子控件的frame</li>
<li>cell的高度</li>
</ul>
<pre><code class="language-objc">@interface XMGStatus : NSObject
/**** 文字\图片数据 ****/
// .....
/**** frame数据 ****/
/** 头像的frame /
@property (nonatomic, assign) CGRect iconFrame;
// .....
/* cell的高度 */
@property (nonatomic, assign) CGFloat cellHeight;
@end
</code></pre>
<ul>
<li>重写模型cellHeight属性的get方法</li>
</ul>
<pre><code class="language-objc">- (CGFloat)cellHeight
{
if (_cellHeight == 0) {
// ... 计算所有子控件的frame、cell的高度
}
return _cellHeight;
}
</code></pre>
<h2 id="toc_3">在控制器中</h2>
<ul>
<li>实现一个返回cell高度的代理方法
<ul>
<li>在这个方法中返回indexPath位置对应cell的高度</li>
</ul></li>
</ul>
<pre><code class="language-objc">/**
- 返回每一行cell的具体高度
*/
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
XMGStatus *status = self.statuses[indexPath.row];
return status.cellHeight;
}
</code></pre>
<ul>
<li>给cell传递模型数据</li>
</ul>
<pre><code class="language-objc">- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID = @"tg";
// 访问缓存池
XMGStatusCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
// 设置数据(传递模型数据)
cell.status = self.statuses[indexPath.row];
return cell;
}
</code></pre>
<h2 id="toc_4">新建一个继承自<code>UITableViewCell</code>的子类,比如XMGStatusCell</h2>
<pre><code class="language-objc">@interface XMGStatusCell : UITableViewCell
@end
</code></pre>
<h2 id="toc_5">在XMGStatusCell.m文件中</h2>
<ul>
<li>重写<code>-initWithStyle:reuseIdentifier:</code>方法
<ul>
<li>在这个方法中添加所有需要显示的子控件</li>
<li>给子控件做一些初始化设置(设置字体、文字颜色等)</li>
</ul></li>
</ul>
<pre><code class="language-objc">/**
- 在这个方法中添加所有的子控件
*/
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
// ......
}
return self;
}
</code></pre>
<h2 id="toc_6">在XMGStatusCell.h文件中提供一个模型属性,比如XMGTg模型</h2>
<pre><code class="language-objc">@class XMGStatus;
@interface XMGStatusCell : UITableViewCell
/** 团购模型数据 */
@property (nonatomic, strong) XMGStatus *status;
@end
</code></pre>
<h2 id="toc_7">在XMGTgCell.m中重写模型属性的set方法</h2>
<ul>
<li>在set方法中给子控件设置模型数据</li>
</ul>
<pre><code class="language-objc">- (void)setStatus:(XMGStatus *)status
{
_status = status;
// .......
}
</code></pre>
<h2 id="toc_8">重写<code>-layoutSubviews</code>方法</h2>
<ul>
<li>一定要调用<code>[super layoutSubviews]</code></li>
<li>在这个方法中设置所有子控件的frame</li>
</ul>
<pre><code class="language-objc">/**
- 在这个方法中设置所有子控件的frame
*/
-
(void)layoutSubviews
{
[super layoutSubviews];// ......
}
</code></pre>
<h1 id="toc_9">自定义不等高cell(Autolayout)</h1>