forkingdog/UITableView-FDTemplateLayoutCell

Name: UITableView-FDTemplateLayoutCell

Owner: forkingdog

Description: Template auto layout cell for automatically UITableViewCell height calculating

Created: 2015-04-16 13:14:19.0

Updated: 2018-05-25 06:02:42.0

Pushed: 2017-12-05 09:54:12.0

Homepage:

Size: 4257

Language: Objective-C

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

UITableView-FDTemplateLayoutCell

Overview

Template auto layout cell for automatically UITableViewCell height calculating.

Demo Overview

Basic usage

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

ort "UITableView+FDTemplateLayoutCell.h"

GFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

return [tableView fd_heightForCellWithIdentifier:@"reuse identifer" configuration:^(id 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:

GFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return [tableView fd_heightForCellWithIdentifier:@"identifer" cacheByIndexPath:indexPath configuration:^(id cell) {
    // configurations
}];

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

GFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
Entity *entity = self.entities[indexPath.row];
return [tableView fd_heightForCellWithIdentifier:@"identifer" cacheByKey:entity.uid configuration:^(id 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:

.fd_enforceFrameLayout = YES;

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

GSize)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”.

.tableView.fd_debugLogEnabled = YES;

It will print like this:

DTemplateLayoutCell ** layout cell created - FDFeedCell
DTemplateLayoutCell ** calculate - [0:0] 233.5
DTemplateLayoutCell ** calculate - [0:1] 155.5
DTemplateLayoutCell ** calculate - [0:2] 258
DTemplateLayoutCell ** calculate - [0:3] 284
DTemplateLayoutCell ** precached - [0:3] 284
DTemplateLayoutCell ** calculate - [0:4] 278.5
DTemplateLayoutCell ** precached - [0:4] 278.5
DTemplateLayoutCell ** hit cache - [0:3] 284
DTemplateLayoutCell ** hit cache - [0:4] 278.5
DTemplateLayoutCell ** hit cache - [0:5] 156
DTemplateLayoutCell ** hit cache - [0:6] 165
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 non-self-satisfied

A good one :)
self-satisfied

Notes

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

??????

?????????? http://blog.sunnyxx.com/2015/05/17/cell-height-calculation/

Installation

Latest version: 1.6

search UITableView+FDTemplateLayoutCell 

If you cannot search out the latest version, try:

setup
Release Notes

We recommend to use the latest release in cocoapods.

License

MIT


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.