省钱达人

UITableView+SDAutoTableViewCellHeight.h 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. //
  2. // UITableView+SDAutoTableViewCellHeight.h
  3. // SDAutoLayout 测试 Demo
  4. //
  5. // Created by aier on 15/11/1.
  6. // Copyright © 2015年 gsd. All rights reserved.
  7. //
  8. /*
  9. *********************************************************************************
  10. * *
  11. * 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 *
  12. * 帮您解决问题。 *
  13. * QQ : 2689718696(gsdios) *
  14. * Email : gsdios@126.com *
  15. * GitHub: https://github.com/gsdios *
  16. * 新浪微博:GSD_iOS *
  17. * *
  18. *********************************************************************************
  19. */
  20. /*
  21. cell高度自适应有“普通版”和“升级版”两个版本:
  22. 1.普通版:两行代码(两步设置)搞定tableview的cell高度自适应(单cell详见demo5,多cell详见demo7)
  23. 2.升级版:只需一步设置即可实现,见下方category“UITableViewController (SDTableViewControllerAutoCellHeight)”)
  24. PS:cell高度自适应前提>>应该调用cell的“- (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin”方法进行cell的自动高度设置
  25. */
  26. #import <UIKit/UIKit.h>
  27. @class SDCellAutoHeightManager;
  28. #define kSDModelCellTag 199206
  29. /* 普通版!两行代码(两步设置)搞定tableview的cell高度自适应(单cell详见demo5,多cell详见demo7) */
  30. @interface UITableView (SDAutoTableViewCellHeight)
  31. @property (nonatomic, strong) SDCellAutoHeightManager *cellAutoHeightManager;
  32. // ☆☆☆☆☆☆☆☆☆☆☆【推荐使用方法(性能高+易用性好),详见demo7和demo9】☆☆☆☆☆☆☆☆☆☆☆
  33. /**
  34. * 返回计算出的cell高度(普通简化版方法,同样只需一步设置即可完成)
  35. * model : cell的数据模型实例
  36. * keyPath : cell的数据模型属性的属性名字符串(即kvc原理中的key)
  37. * cellClass : 当前的indexPath对应的cell的class
  38. * contentViewWidth : cell的contentView的宽度
  39. */
  40. - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth;
  41. // ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
  42. // >>>>>>>>>>>>>> 单个cell情景下调用以下方法 >>>>>>>>>>>>>>
  43. /** (不再推荐使用此方法!)开启高度自适应,建议在tableview的数据源方法“- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section”中调用此方法*/
  44. - (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth NS_DEPRECATED(10_0, 10_4, 6_0, 6_0);
  45. /** (不再推荐使用此方法!)返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key)*/
  46. - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath NS_DEPRECATED(10_0, 10_4, 6_0, 6_0);
  47. // >>>>>>>>>>>>>> 多cell情景下调用以下方法(详细用法见demo7) >>>>>>>>>>>>>>>>>
  48. /** (不再推荐使用此方法!)cellClassArray 为所有cell的类组成的数组,详细用法见demo7 */
  49. - (void)startAutoCellHeightWithCellClasses:(NSArray *)cellClassArray contentViewWidth:(CGFloat)contentViewWidth NS_DEPRECATED(10_0, 10_4, 6_0, 6_0);
  50. /** (不再推荐使用此方法!)返回计算出的cell高度;model为cell的数据模型实例;keyPath为cell的数据模型属性的属性名字符串(即kvc原理中的key) */
  51. - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass NS_DEPRECATED(10_0, 10_4, 6_0, 6_0);
  52. @end
  53. /* 升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell(详见demo8) */
  54. @interface UITableViewController (SDTableViewControllerAutoCellHeight)
  55. /** (UITableViewController方法)升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell,性能比普通版稍微差一些,不建议在数据量大的tableview中使用 */
  56. - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width;
  57. @end
  58. @interface NSObject (SDAnyObjectAutoCellHeight)
  59. /** (NSObject方法)升级版!一行代码(一步设置)搞定tableview的cell高度自适应,同时适用于单cell和多cell,性能比普通版稍微差一些,不建议在数据量大的tableview中使用 */
  60. - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath cellContentViewWidth:(CGFloat)width tableView:(UITableView *)tableView;
  61. @end
  62. // ------------------------------- 以下为库内部使用无须了解 --------------------
  63. @interface SDCellAutoHeightManager : NSObject
  64. @property (nonatomic, assign) CGFloat contentViewWidth;
  65. @property (nonatomic, assign) Class cellClass;
  66. @property (nonatomic, assign) CGFloat cellHeight;
  67. @property (nonatomic, strong) UITableViewCell *modelCell;
  68. - (void)clearHeightCache;
  69. - (void)clearHeightCacheOfIndexPaths:(NSArray *)indexPaths;
  70. - (NSNumber *)heightCacheForIndexPath:(NSIndexPath *)indexPath;
  71. - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath;
  72. - (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath cellClass:(Class)cellClass;
  73. - (instancetype)initWithCellClass:(Class)cellClass;
  74. + (instancetype)managerWithCellClass:(Class)cellClass;
  75. @end
  76. // 版权属于原作者
  77. // http://code4app.com (cn) http://code4app.net (en)
  78. // 发布代码于最专业的源码分享网站: Code4App.com