UITableView-FDTemplateLayoutCell
博客专区 > ming_sr 的博客 > 博客详情
UITableView-FDTemplateLayoutCell
ming_sr 发表于1年前
UITableView-FDTemplateLayoutCell
  • 发表于 1年前
  • 阅读 6
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

 

 

 

 

Overview

Template auto layout cell for automatically UITableViewCell height calculating.

 

 

 

Basic usage

If you have a self-satisfied cell, then all you have to do is:

#import UITableView+FDTemplateLayoutCell.h

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return [tableView fd_heightForCellWithIdentifier:reuse identifer configuration:^( cell) {
        // Configure this cell with data, same as what you've done in "-tableView:cellForRowAtIndexPath:"
        // Like:
        //    cell.entity = self.feedEntities[indexPath.row];
    }];
}

Height Caching API

Since iOS8, -tableView:heightForRowAtIndexPath: will be called more times than we expect, we can feel these extra calculations when scrolling. So we provide another API with cache by index path:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return [tableView fd_heightForCellWithIdentifier:identifer cacheByIndexPath:indexPath configuration:^( cell) {
        // configurations
    }];
}

Or, if your entity has an unique identifier, use cache by key API:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    Entity *entity = self.entities[indexPath.row];
    return [tableView fd_heightForCellWithIdentifier:identifer cacheByKey:entity.uid configuration:^( cell) {
        // configurations
    }];
}

Frame layout mode

FDTemplateLayoutCell offers 2 modes for asking cell's height.

  1. Auto layout mode using "-systemLayoutSizeFittingSize:"
  2. Frame layout mode using "-sizeThatFits:"

Generally, no need to care about modes, it will automatically choose a proper mode by whether you have set auto layout constrants on cell's content view. If you want to enforce frame layout mode, enable this property in your cell's configuration block:

cell.fd_enforceFrameLayout = ;

And if you're using frame layout mode, you must override -sizeThatFits: in your customized cell and return content view's height (separator excluded)

- (CGSize)sizeThatFits:(CGSize)size {
    return CGSizeMake(size.width, A+B+C+D+E+....);
}

Debug log

Debug log helps to debug or inspect what is this "FDTemplateLayoutCell" extention doing, turning on to print logs when "calculating", "precaching" or "hitting cache".Default to "NO", log by "NSLog".

self.tableView.fd_debugLogEnabled = ;

It will print like this:

** FDTemplateLayoutCell ** layout cell created - FDFeedCell
** FDTemplateLayoutCell ** calculate - [:] 233.5
** FDTemplateLayoutCell ** calculate - [:] 155.5
** FDTemplateLayoutCell ** calculate - [:] 
** FDTemplateLayoutCell ** calculate - [:] 
** FDTemplateLayoutCell ** precached - [:] 
** FDTemplateLayoutCell ** calculate - [:] 278.5
** FDTemplateLayoutCell ** precached - [:] 278.5
** FDTemplateLayoutCell ** hit cache - [:] 
** FDTemplateLayoutCell ** hit cache - [:] 278.5
** FDTemplateLayoutCell ** hit cache - [:] 
** FDTemplateLayoutCell ** hit cache - [:]

About self-satisfied cell

a fully self-satisfied cell is constrainted by auto layout and each edge("top", "left", "bottom", "right") has at least one layout constraint against it. It's the same concept introduced as "self-sizing cell" in iOS8 using auto layout.

A bad one :( - missing right and bottom

 

 

A good one :)

 

 

Notes

A template layout cell is created by -dequeueReusableCellWithIdentifier: method, it means that you MUST have registered this cell reuse identifier by one of:

  • A prototype cell of UITableView in storyboard.
  • Use -registerNib:forCellReuseIdentifier:
  • Use -registerClass:forCellReuseIdentifier:

如果你在天朝

可以看这篇中文博客: http://blog.sunnyxx.com/2015/05/17/cell-height-calculation/

Installation

Latest version: 1.4.beta

pod search UITableView+FDTemplateLayoutCell 

If you cannot search out the latest version, try:

pod setup

Release Notes

We recommend to use the latest release in cocoapods.

  • 1.4
    Refactor, add "cacheByKey" mode, bug fixed

  • 1.3
    Frame layout mode, handle cell's accessory view/type

  • 1.2
    Precache and auto cache invalidation

  • 1.1
    Height cache

  • 1.0
    Basic automatically height calculation

License

共有 人打赏支持
粉丝 0
博文 2
码字总数 0
×
ming_sr
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: