UITableView-FDTemplateLayoutCell 使用
2016-01-22 17:50
519 查看
基本用法
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:^(id cell) {
// Configure this cell with data, same as what you've done in "-tableView:cellForRowAtIndexPath:"
// Like:
// cell.entity = self.feedEntities[indexPath.row];
}];
}
高度缓存 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:^(id 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:^(id cell) {
// configurations
}];
}
布局模型
FDTemplateLayoutCelloffers
2 modes for asking cell's height.
Auto layout mode using "-systemLayoutSizeFittingSize:"
Frame layout mode using "-sizeThatFits:"
1.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.
2.If
you want to enforce frame layout mode, enable this property in your cell's configuration block:
cell.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)
- (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" extentiondoing, turning on to print logs when "calculating", "precaching" or "hitting cache".Default to "NO", log by "NSLog".
self.tableView.fd_debugLogEnabled = YES;
** FDTemplateLayoutCell ** layout cell created - FDFeedCell ** FDTemplateLayoutCell ** calculate - [0:0] 233.5 ** FDTemplateLayoutCell ** calculate - [0:1] 155.5 ** FDTemplateLayoutCell ** calculate - [0:2] 258 ** FDTemplateLayoutCell ** calculate - [0:3] 284 ** FDTemplateLayoutCell ** precached - [0:3] 284 ** FDTemplateLayoutCell ** calculate - [0:4] 278.5 ** FDTemplateLayoutCell ** precached - [0:4] 278.5 ** FDTemplateLayoutCell ** hit cache - [0:3] 284 ** FDTemplateLayoutCell ** hit cache - [0:4] 278.5 ** FDTemplateLayoutCell ** hit cache - [0:5] 156 ** FDTemplateLayoutCell ** hit cache - [0:6] 165
相关文章推荐
- LFS进阶版(QT)——GUI界面的实现
- iOS个人整理13-导航控制器-UINavigationController
- CharSequence类型数据跨进程传递
- iOS CUICatalog: Invalid asset name supplied:
- IOS UITextView和UITextFiled的区别
- IOS点击UITextField不弹出键盘但是可以输入粘贴。。。
- 优先队列——二项队列(binominal queue)
- Android中Builder设计模式
- TBluetoothLE.OnDisconnectDevice
- 优先队列——二项队列(binominal queue)
- continue
- UIImagePickerController
- Android Studio 一直Building
- UIView 加边框
- Elasticsearch 之 query与filter区别
- 安卓如何加载一张大图,避免OOM
- Unable to convert MySQL date/time value to System.DateTime
- Hadoop源代码中的build-main.xml
- UITableView的属性
- 设计模式之Builder模式