Skip to content

Commit 489ceea

Browse files
committed
调整文件结构
1 parent e228745 commit 489ceea

6 files changed

Lines changed: 1363 additions & 20 deletions

File tree

SDAutoLayout 测试 Demo.xcodeproj/project.pbxproj

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@
1414
487D3EC21BCB9EC700A66173 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 487D3EC11BCB9EC700A66173 /* Images.xcassets */; };
1515
487D3EC51BCB9EC700A66173 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 487D3EC31BCB9EC700A66173 /* LaunchScreen.xib */; };
1616
487D3ED11BCB9EC700A66173 /* SDAutoLayout____DemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3ED01BCB9EC700A66173 /* SDAutoLayout____DemoTests.m */; };
17-
487D3EDD1BCB9EEE00A66173 /* UIView+SDAutoLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EDC1BCB9EEE00A66173 /* UIView+SDAutoLayout.m */; };
1817
487D3EE11BCBA55700A66173 /* DemoVC0.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EE01BCBA55700A66173 /* DemoVC0.m */; };
1918
487D3EE41BCBA6CA00A66173 /* DemoVC1.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EE31BCBA6CA00A66173 /* DemoVC1.m */; };
2019
487D3EE71BCBA78B00A66173 /* DemoTableViewControler.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EE61BCBA78B00A66173 /* DemoTableViewControler.m */; };
2120
487D3EEA1BCBACF500A66173 /* DemoVC2.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EE91BCBACF500A66173 /* DemoVC2.m */; };
2221
487D3EF01BCBB61A00A66173 /* TestCell2.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EED1BCBB61A00A66173 /* TestCell2.m */; };
2322
487D3EF41BCBB71500A66173 /* DemoVC3.m in Sources */ = {isa = PBXBuildFile; fileRef = 487D3EF31BCBB71500A66173 /* DemoVC3.m */; };
2423
48D632331BD0A7B500F86A88 /* DemoVC4.m in Sources */ = {isa = PBXBuildFile; fileRef = 48D632321BD0A7B500F86A88 /* DemoVC4.m */; };
25-
99E7288B1BE5D04700771161 /* UITableView+SDAutoTableViewCellHeight.m in Sources */ = {isa = PBXBuildFile; fileRef = 99E7288A1BE5D04600771161 /* UITableView+SDAutoTableViewCellHeight.m */; };
24+
48DA2AEB1BFB430600A771E6 /* UITableView+SDAutoTableViewCellHeight.m in Sources */ = {isa = PBXBuildFile; fileRef = 48DA2AE81BFB430600A771E6 /* UITableView+SDAutoTableViewCellHeight.m */; };
25+
48DA2AEC1BFB430600A771E6 /* UIView+SDAutoLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 48DA2AEA1BFB430600A771E6 /* UIView+SDAutoLayout.m */; };
2626
99E728A71BE5E22D00771161 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 99E7289D1BE5E22D00771161 /* [email protected] */; };
2727
99E728A81BE5E22D00771161 /* SDRefreshFooterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 99E728A01BE5E22D00771161 /* SDRefreshFooterView.m */; };
2828
99E728A91BE5E22D00771161 /* SDRefreshHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 99E728A21BE5E22D00771161 /* SDRefreshHeaderView.m */; };
@@ -54,8 +54,6 @@
5454
487D3ECA1BCB9EC700A66173 /* SDAutoLayout 测试 DemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SDAutoLayout 测试 DemoTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
5555
487D3ECF1BCB9EC700A66173 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
5656
487D3ED01BCB9EC700A66173 /* SDAutoLayout____DemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "SDAutoLayout____DemoTests.m"; sourceTree = "<group>"; };
57-
487D3EDB1BCB9EEE00A66173 /* UIView+SDAutoLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+SDAutoLayout.h"; sourceTree = "<group>"; };
58-
487D3EDC1BCB9EEE00A66173 /* UIView+SDAutoLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+SDAutoLayout.m"; sourceTree = "<group>"; };
5957
487D3EDF1BCBA55700A66173 /* DemoVC0.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC0.h; sourceTree = "<group>"; };
6058
487D3EE01BCBA55700A66173 /* DemoVC0.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC0.m; sourceTree = "<group>"; };
6159
487D3EE21BCBA6CA00A66173 /* DemoVC1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC1.h; sourceTree = "<group>"; };
@@ -70,8 +68,10 @@
7068
487D3EF31BCBB71500A66173 /* DemoVC3.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC3.m; sourceTree = "<group>"; };
7169
48D632311BD0A7B500F86A88 /* DemoVC4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoVC4.h; sourceTree = "<group>"; };
7270
48D632321BD0A7B500F86A88 /* DemoVC4.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoVC4.m; sourceTree = "<group>"; };
73-
99E728891BE5D04600771161 /* UITableView+SDAutoTableViewCellHeight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITableView+SDAutoTableViewCellHeight.h"; sourceTree = "<group>"; };
74-
99E7288A1BE5D04600771161 /* UITableView+SDAutoTableViewCellHeight.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITableView+SDAutoTableViewCellHeight.m"; sourceTree = "<group>"; };
71+
48DA2AE71BFB430600A771E6 /* UITableView+SDAutoTableViewCellHeight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITableView+SDAutoTableViewCellHeight.h"; sourceTree = "<group>"; };
72+
48DA2AE81BFB430600A771E6 /* UITableView+SDAutoTableViewCellHeight.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITableView+SDAutoTableViewCellHeight.m"; sourceTree = "<group>"; };
73+
48DA2AE91BFB430600A771E6 /* UIView+SDAutoLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+SDAutoLayout.h"; sourceTree = "<group>"; };
74+
48DA2AEA1BFB430600A771E6 /* UIView+SDAutoLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+SDAutoLayout.m"; sourceTree = "<group>"; };
7575
99E7289D1BE5E22D00771161 /* [email protected] */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "[email protected]"; sourceTree = "<group>"; };
7676
99E7289E1BE5E22D00771161 /* SDRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDRefresh.h; sourceTree = "<group>"; };
7777
99E7289F1BE5E22D00771161 /* SDRefreshFooterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDRefreshFooterView.h; sourceTree = "<group>"; };
@@ -123,9 +123,9 @@
123123
487D3EB31BCB9EC700A66173 /* SDAutoLayout 测试 Demo */ = {
124124
isa = PBXGroup;
125125
children = (
126+
48DA2AE61BFB430600A771E6 /* SDAutoLayout */,
126127
99E7289C1BE5E22D00771161 /* SDRefeshView */,
127128
487D3EDE1BCBA52900A66173 /* DemoVC */,
128-
487D3EDA1BCB9EEE00A66173 /* SDAutoLayout */,
129129
487D3EB81BCB9EC700A66173 /* AppDelegate.h */,
130130
487D3EB91BCB9EC700A66173 /* AppDelegate.m */,
131131
487D3EE51BCBA78B00A66173 /* DemoTableViewControler.h */,
@@ -164,17 +164,6 @@
164164
name = "Supporting Files";
165165
sourceTree = "<group>";
166166
};
167-
487D3EDA1BCB9EEE00A66173 /* SDAutoLayout */ = {
168-
isa = PBXGroup;
169-
children = (
170-
487D3EDB1BCB9EEE00A66173 /* UIView+SDAutoLayout.h */,
171-
487D3EDC1BCB9EEE00A66173 /* UIView+SDAutoLayout.m */,
172-
99E728891BE5D04600771161 /* UITableView+SDAutoTableViewCellHeight.h */,
173-
99E7288A1BE5D04600771161 /* UITableView+SDAutoTableViewCellHeight.m */,
174-
);
175-
path = SDAutoLayout;
176-
sourceTree = "<group>";
177-
};
178167
487D3EDE1BCBA52900A66173 /* DemoVC */ = {
179168
isa = PBXGroup;
180169
children = (
@@ -204,6 +193,17 @@
204193
name = DemoVC3;
205194
sourceTree = "<group>";
206195
};
196+
48DA2AE61BFB430600A771E6 /* SDAutoLayout */ = {
197+
isa = PBXGroup;
198+
children = (
199+
48DA2AE71BFB430600A771E6 /* UITableView+SDAutoTableViewCellHeight.h */,
200+
48DA2AE81BFB430600A771E6 /* UITableView+SDAutoTableViewCellHeight.m */,
201+
48DA2AE91BFB430600A771E6 /* UIView+SDAutoLayout.h */,
202+
48DA2AEA1BFB430600A771E6 /* UIView+SDAutoLayout.m */,
203+
);
204+
path = SDAutoLayout;
205+
sourceTree = "<group>";
206+
};
207207
99E7289C1BE5E22D00771161 /* SDRefeshView */ = {
208208
isa = PBXGroup;
209209
children = (
@@ -325,19 +325,19 @@
325325
files = (
326326
487D3EE71BCBA78B00A66173 /* DemoTableViewControler.m in Sources */,
327327
487D3EBD1BCB9EC700A66173 /* ViewController.m in Sources */,
328+
48DA2AEC1BFB430600A771E6 /* UIView+SDAutoLayout.m in Sources */,
328329
487D3EF41BCBB71500A66173 /* DemoVC3.m in Sources */,
329330
487D3EBA1BCB9EC700A66173 /* AppDelegate.m in Sources */,
331+
48DA2AEB1BFB430600A771E6 /* UITableView+SDAutoTableViewCellHeight.m in Sources */,
330332
99E728AA1BE5E22D00771161 /* SDRefreshView.m in Sources */,
331333
48D632331BD0A7B500F86A88 /* DemoVC4.m in Sources */,
332334
487D3EE11BCBA55700A66173 /* DemoVC0.m in Sources */,
333335
99E728AB1BE5E22D00771161 /* UIView+SDExtension.m in Sources */,
334336
99E728A81BE5E22D00771161 /* SDRefreshFooterView.m in Sources */,
335337
487D3EEA1BCBACF500A66173 /* DemoVC2.m in Sources */,
336338
99E728A91BE5E22D00771161 /* SDRefreshHeaderView.m in Sources */,
337-
487D3EDD1BCB9EEE00A66173 /* UIView+SDAutoLayout.m in Sources */,
338339
487D3EF01BCBB61A00A66173 /* TestCell2.m in Sources */,
339340
487D3EB71BCB9EC700A66173 /* main.m in Sources */,
340-
99E7288B1BE5D04700771161 /* UITableView+SDAutoTableViewCellHeight.m in Sources */,
341341
487D3EE41BCBA6CA00A66173 /* DemoVC1.m in Sources */,
342342
);
343343
runOnlyForDeploymentPostprocessing = 0;
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
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+
*********************************************************************************
12+
* *
13+
* 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 *
14+
* 帮您解决问题。 *
15+
* QQ : 2689718696(gsdios) *
16+
* Email : [email protected] *
17+
* GitHub: https://github.com/gsdios *
18+
* 新浪微博:GSD_iOS *
19+
* *
20+
*********************************************************************************
21+
22+
*/
23+
24+
#import <UIKit/UIKit.h>
25+
26+
#define kSDModelCellTag 199206
27+
28+
29+
@interface UITableViewCell (SDAutoHeight)
30+
31+
@property (nonatomic) CGFloat autoHeight;
32+
33+
@property (nonatomic) UIView *sd_bottomView;
34+
@property (nonatomic) CGFloat sd_bottomViewBottomMargin;
35+
36+
- (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin;
37+
38+
@end
39+
40+
41+
@interface SDCellAutoHeightManager : NSObject
42+
43+
@property (nonatomic, assign) CGFloat contentViewWidth;
44+
45+
@property (nonatomic, assign) Class cellClass;
46+
47+
@property (nonatomic, assign) CGFloat cellHeight;
48+
49+
- (void)clearHeightCache;
50+
51+
- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath;
52+
53+
- (instancetype)initWithCellClass:(Class)cellClass;
54+
+ (instancetype)managerWithCellClass:(Class)cellClass;
55+
@end
56+
57+
@interface UITableView (SDAutoTableViewCellHeight)
58+
59+
- (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth;
60+
- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath;
61+
@property (nonatomic, strong) SDCellAutoHeightManager *cellAutoHeightManager;
62+
63+
@end
64+
Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
//
2+
// UITableView+SDAutoTableViewCellHeight.m
3+
// SDAutoLayout 测试 Demo
4+
//
5+
// Created by aier on 15/11/1.
6+
// Copyright © 2015年 gsd. All rights reserved.
7+
//
8+
9+
/*
10+
11+
*********************************************************************************
12+
* *
13+
* 在您使用此自动布局库的过程中如果出现bug请及时以以下任意一种方式联系我们,我们会及时修复bug并 *
14+
* 帮您解决问题。 *
15+
* QQ : 2689718696(gsdios) *
16+
* Email : [email protected] *
17+
* GitHub: https://github.com/gsdios *
18+
* 新浪微博:GSD_iOS *
19+
* *
20+
*********************************************************************************
21+
22+
*/
23+
24+
#import "UITableView+SDAutoTableViewCellHeight.h"
25+
#import "UIView+SDAutoLayout.h"
26+
#import <objc/runtime.h>
27+
28+
@implementation UITableViewCell (SDAutoHeight)
29+
30+
- (void)setupAutoHeightWithBottomView:(UIView *)bottomView bottomMargin:(CGFloat)bottomMargin
31+
{
32+
self.sd_bottomView = bottomView;
33+
self.sd_bottomViewBottomMargin = bottomMargin;
34+
self.sd_layout.autoHeightRatio(0);
35+
}
36+
37+
- (CGFloat)autoHeight
38+
{
39+
return [objc_getAssociatedObject(self, _cmd) floatValue];
40+
}
41+
42+
- (void)setAutoHeight:(CGFloat)autoHeight
43+
{
44+
objc_setAssociatedObject(self, @selector(autoHeight), @(autoHeight), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
45+
}
46+
47+
- (UIView *)sd_bottomView
48+
{
49+
return objc_getAssociatedObject(self, _cmd);
50+
}
51+
52+
- (void)setSd_bottomView:(UIView *)sd_bottomView
53+
{
54+
objc_setAssociatedObject(self, @selector(sd_bottomView), sd_bottomView, OBJC_ASSOCIATION_ASSIGN);
55+
}
56+
57+
- (CGFloat)sd_bottomViewBottomMargin
58+
{
59+
return [objc_getAssociatedObject(self, _cmd) floatValue];
60+
}
61+
62+
- (void)setSd_bottomViewBottomMargin:(CGFloat)sd_bottomViewBottomMargin
63+
{
64+
objc_setAssociatedObject(self, @selector(sd_bottomViewBottomMargin), @(sd_bottomViewBottomMargin), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
65+
}
66+
67+
@end
68+
69+
@implementation SDCellAutoHeightManager
70+
{
71+
NSMutableDictionary *_cacheDictionary;
72+
UITableViewCell *_modelCell;
73+
}
74+
75+
- (instancetype)initWithCellClass:(Class)cellClass
76+
{
77+
if (self = [super init]) {
78+
_modelCell = (UITableViewCell *)[cellClass alloc];
79+
_modelCell = [_modelCell initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellAutoHeightManager"];
80+
if (!_modelCell.contentView.subviews.count) {
81+
UITableView *temp = [UITableView new];
82+
[temp registerNib:[UINib nibWithNibName:NSStringFromClass(cellClass) bundle:nil] forCellReuseIdentifier:@"SDCellAutoHeightManager"];
83+
_modelCell = [temp dequeueReusableCellWithIdentifier:@"SDCellAutoHeightManager"];
84+
}
85+
_modelCell.contentView.tag = kSDModelCellTag;
86+
_cellClass = cellClass;
87+
88+
_cacheDictionary = [NSMutableDictionary new];
89+
}
90+
return self;
91+
}
92+
93+
+ (instancetype)managerWithCellClass:(Class)cellClass
94+
{
95+
SDCellAutoHeightManager *manager = [[self alloc] initWithCellClass:cellClass];
96+
return manager;
97+
}
98+
99+
- (void)clearHeightCache
100+
{
101+
[_cacheDictionary removeAllObjects];
102+
}
103+
104+
- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath
105+
{
106+
NSString *cacheKey = [NSString stringWithFormat:@"%ld%ld", (long)indexPath.section, (long)indexPath.row];
107+
NSNumber *cacheHeight = [_cacheDictionary objectForKey:cacheKey];
108+
if (cacheHeight) {
109+
return [cacheHeight floatValue];
110+
} else {
111+
if (model && keyPath) {
112+
[_modelCell setValue:model forKey:keyPath];
113+
}
114+
[_modelCell.contentView layoutSubviews];
115+
[_cacheDictionary setObject:@(_modelCell.autoHeight) forKey:cacheKey];
116+
return _modelCell.autoHeight;
117+
}
118+
}
119+
120+
- (void)setContentViewWidth:(CGFloat)contentViewWidth
121+
{
122+
if (_contentViewWidth != contentViewWidth) {
123+
[self clearHeightCache];
124+
}
125+
_contentViewWidth = contentViewWidth;
126+
127+
_modelCell.frame = CGRectMake(0, 0, contentViewWidth, 44);
128+
_modelCell.contentView.frame = CGRectMake(0, 0, contentViewWidth, 44);
129+
}
130+
131+
@end
132+
133+
134+
@implementation UITableView (SDAutoTableViewCellHeight)
135+
136+
+ (void)load {
137+
static dispatch_once_t onceToken;
138+
dispatch_once(&onceToken, ^{
139+
Method reloadData = class_getInstanceMethod(self, @selector(reloadData));
140+
Method sd_reloadData = class_getInstanceMethod(self, @selector(sd_reloadData));
141+
method_exchangeImplementations(reloadData, sd_reloadData);
142+
});
143+
}
144+
145+
- (void)sd_reloadData
146+
{
147+
[self.cellAutoHeightManager clearHeightCache];
148+
[self sd_reloadData];
149+
}
150+
/*
151+
* 下一步即将实现的功能
152+
153+
- (void)sd_insertRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
154+
{
155+
[self sd_insertRowsAtIndexPaths:indexPaths withRowAnimation:animation];
156+
}
157+
158+
- (void)sd_deleteRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
159+
{
160+
[self sd_deleteRowsAtIndexPaths:indexPaths withRowAnimation:animation];
161+
}
162+
163+
- (void)sd_reloadRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
164+
{
165+
[self sd_reloadRowsAtIndexPaths:indexPaths withRowAnimation:animation];
166+
}
167+
168+
- (void)sd_moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath
169+
{
170+
[self sd_moveRowAtIndexPath:indexPath toIndexPath:newIndexPath];
171+
}
172+
173+
*/
174+
175+
- (void)startAutoCellHeightWithCellClass:(Class)cellClass contentViewWidth:(CGFloat)contentViewWidth
176+
{
177+
if (!self.cellAutoHeightManager) {
178+
self.cellAutoHeightManager = [SDCellAutoHeightManager managerWithCellClass:cellClass];
179+
}
180+
self.cellAutoHeightManager.contentViewWidth = contentViewWidth;
181+
}
182+
183+
- (CGFloat)cellHeightForIndexPath:(NSIndexPath *)indexPath model:(id)model keyPath:(NSString *)keyPath
184+
{
185+
return [self.cellAutoHeightManager cellHeightForIndexPath:indexPath model:model keyPath:keyPath];
186+
}
187+
188+
- (SDCellAutoHeightManager *)cellAutoHeightManager
189+
{
190+
return objc_getAssociatedObject(self, _cmd);
191+
}
192+
193+
- (void)setCellAutoHeightManager:(SDCellAutoHeightManager *)cellAutoHeightManager
194+
{
195+
objc_setAssociatedObject(self, @selector(cellAutoHeightManager), cellAutoHeightManager, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
196+
}
197+
198+
@end
199+
200+
201+
202+

0 commit comments

Comments
 (0)