文档章节

UITableView-FDTemplateLayoutCell

ming_sr
 ming_sr
发布于 2016/11/10 00:55
字数 484
阅读 8
收藏 0

 

 

 

 

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

本文转载自:

共有 人打赏支持
ming_sr
粉丝 0
博文 2
码字总数 0
作品 0
广州
程序员
【iOS】Masonry 和 FDTemplateLayoutCell 搭配使用「UITableview 自适应内容高度」

本文来自尚妆iOS团队嘉文 发表于尚妆github博客,欢迎订阅! 准备: 1.FDTemplateLayoutCell 由sunny大神出品的自动计算UITableviewCell高度 FDTemplateLayoutCell下载 2.Masonry 目前最流行的...

尚妆产品技术刊读
2017/03/07
0
0
有了Auto Layout,为什么你还是害怕写UITabelView的自适应布局?

Apple 算是最重视应用开发体验的公司了.从Xib到StoryBoard,从Auto Layout到Size Class,每一次的更新,都会给iOS应用的开发带来不小的便利.但是,对于绝对多数iOS攻城狮来说,我们依然还是很害怕...

ios122
2015/09/23
0
0
iOS UITableView代理方法详解

iOS UITableView的代理方法详解 一、补充 在上一篇博客中,http://my.oschina.net/u/2340880/blog/404605,我将IOS中tableView(表视图)的一些常用方法总结了一下,这篇将tableView的代理方法...

珲少
2015/04/22
0
2
UI_09 UITableView(表视图)

⼀、表视图 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView。UITableView继承自UIScrollView,因此支持垂直滚动,而且性能极佳 1、表示图的样式 UITableViewStylePlain UITa...

黑伞将军
2015/08/26
0
0
UITableView的优化原理

当我们下啦一个 UITableView时,如果没有做优化,只是简单的实现功能代码如下,这样当我们有上百条tableviewcell的时候,我们滑动的非常快时会非常费内存,当然苹果公司不会让我们这样干,苹...

哥特复心
2013/11/29
0
3

没有更多内容

加载失败,请刷新页面

加载更多

五类数据存储模型行、列、键值对、文档、图

1、行存储 定义:关系模型使用记录(行或者元组)进行存储,记录存储在表中,表由架构界定。表中的每个列都有名称和类型,表中的所有记录都要符合表的定义。SQL是专门的查询语言,提供相应的...

PeakFang-BOK
21分钟前
1
0
部署springcloud到docker中

1.在centos7中安装docker 2.打包eureka-server: 修改application.properties: 此处,eureka.instance.perfer-ip-address=true 表示实例地址为服务器的ip地址 使用maven命令打包: cmd进入项...

狼王黄师傅
36分钟前
1
0
赋能,打造不确定性敏捷团队

writeademo
37分钟前
1
0
Go interface{} to string

package mainimport "fmt"func main() {var a interface{}a = "dsadjaldaldad"var b stringb = a.(string) // 话说,用人话说的话,这叫什么操作?fmt.Println(a, b)}...

taadis
39分钟前
0
0
数据库防火墙

数据库防火墙顾名思义是一款数据(库)安全设备,从防火墙这个词可以看出,其主要作用是做来自于外部的危险隔离。换句话说,数据库防火墙应该在入侵在到达数据库之前将其阻断,至少需要在入侵...

突突突酱
49分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部