自定义不等高cell

<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>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容