iOS开发--storyboard+autolayout定制灵活高度tableviewCell
2015-05-14 18:44
656 查看
第一步、为了简化流程直接用新创建工程中的viewController及storyboard;
第二步、将该storyboard的view换成UITableView并且将UITableViewCell的datasource以及delegate连线到viewController,设置cell的Identifier:cell
第三步、创建RNTableViewCell来管理定制Cell,并且将storyboard中cell的类别改为RNTableviewCell
第四步、向cell中拖一个label,设置该label的相对位置(label的constraints可以不添加宽和高的约束)以及设置为sizeto fit content
第五步、在RNTableViewCell.m文件中创建IBOutLet属性的testLabel与storyboard中刚添加的label连线
@property (weak,
nonatomic) IBOutletUILabel *testLabel;
第六步、在RNTableViewCell.h文件中声明一个NSString属性用来在外部设置label要显示的文本内容
@property (nonatomic, copy) NSString *testString;
第七步、在RNTableViewCell.h中提供一个外部方法
- (CGFloat)cellHeightWithTestString:(NSString *)testString;
第八步、在RNTableViewCell.m实现testString的setter方法以及第七步声明的方法
- (void)setTestString:(NSString*)testString
{
_testString = testString;
self.testLabel.text = _testString;
}
- (CGFloat)cellHeightWithTestString:(NSString *)testString
{
self.testString= testString;
return
[self.testLabelsystemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
// 关键代码:这里不可以通过label的frame去获取调整后的label高度
}
第九步、在RNTableViewCell.m中重写awakeFromNib方法设置testLabel的最大宽度
- (void)awakeFromNib {
self.testLabel.preferredMaxLayoutWidth = [UIScreen
mainScreen].bounds.size.width;
}
第十步、在viewController里设置tableview的数据及高度
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
return
1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
RNTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (cell ==
nil){
cell = [[RNTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
NSString *string = @"asdl;fkjadsl;kgad;klsjfadshg;lkadsjf;adhgfkhfhklshfljkadshgkladsjflkadjsl;kfajdsgl;kadsl;hflakdsjfl;kasdjfl;kadsjflk;adsjfl;kadsjf;ladsjfl;kadjgasdlgh;laskdjflkdasjf;lkdsjfklad;lkadsjfkladsjf;lkdasjf;lkdajfa;l";
//直接随便敲了一串字符,汗!
cell.testString = string;
self.testString= string;
return cell;
}
- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
RNTableViewCell *cell = (RNTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"cell"];
return [cell cellHeightWithString:self.testString];
}
第二步、将该storyboard的view换成UITableView并且将UITableViewCell的datasource以及delegate连线到viewController,设置cell的Identifier:cell
第三步、创建RNTableViewCell来管理定制Cell,并且将storyboard中cell的类别改为RNTableviewCell
第四步、向cell中拖一个label,设置该label的相对位置(label的constraints可以不添加宽和高的约束)以及设置为sizeto fit content
第五步、在RNTableViewCell.m文件中创建IBOutLet属性的testLabel与storyboard中刚添加的label连线
@property (weak,
nonatomic) IBOutletUILabel *testLabel;
第六步、在RNTableViewCell.h文件中声明一个NSString属性用来在外部设置label要显示的文本内容
@property (nonatomic, copy) NSString *testString;
第七步、在RNTableViewCell.h中提供一个外部方法
- (CGFloat)cellHeightWithTestString:(NSString *)testString;
第八步、在RNTableViewCell.m实现testString的setter方法以及第七步声明的方法
- (void)setTestString:(NSString*)testString
{
_testString = testString;
self.testLabel.text = _testString;
}
- (CGFloat)cellHeightWithTestString:(NSString *)testString
{
self.testString= testString;
return
[self.testLabelsystemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
// 关键代码:这里不可以通过label的frame去获取调整后的label高度
}
第九步、在RNTableViewCell.m中重写awakeFromNib方法设置testLabel的最大宽度
- (void)awakeFromNib {
self.testLabel.preferredMaxLayoutWidth = [UIScreen
mainScreen].bounds.size.width;
}
第十步、在viewController里设置tableview的数据及高度
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
return
1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
RNTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (cell ==
nil){
cell = [[RNTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
NSString *string = @"asdl;fkjadsl;kgad;klsjfadshg;lkadsjf;adhgfkhfhklshfljkadshgkladsjflkadjsl;kfajdsgl;kadsl;hflakdsjfl;kasdjfl;kadsjflk;adsjfl;kadsjf;ladsjfl;kadjgasdlgh;laskdjflkdasjf;lkdsjfklad;lkadsjfkladsjf;lkdasjf;lkdajfa;l";
//直接随便敲了一串字符,汗!
cell.testString = string;
self.testString= string;
return cell;
}
- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
RNTableViewCell *cell = (RNTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"cell"];
return [cell cellHeightWithString:self.testString];
}
相关文章推荐
- iOS网络高级编程:iPhone和iPad的企业应用开发之错误处理
- ioS开发之UI基础--NSRunLoop了解
- iOS开发中实现新闻图片的无限循环展示的方法
- iOS 开发手机端生成 4000 随机验证码视图
- iOS开发-二维码扫描和应用跳转
- iOS开发中行高灵活可变的UITableView的性能优化
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-6-25日更新iap恢复详解】
- ios开发 粒子效果 参数详解 CAEmitterCell
- 最快入门ios开发-第三,四天
- IOS开发之显示微博表情
- iOS开发之圆角指定 分类: ios技术 2015-05-25 16:26 191人阅读 评论(0) 收藏
- iOS开发UI篇——CAlayer(创建图层)
- iOS开发--Block容易造成循环引用
- iOS开发中的火星坐标系及各种坐标系转换算法
- iOS开发 跳转系统设置
- 【iOS开发】AsyncSocket长连接粘包问题解决方案
- ios开发中对block 的理解
- iOS开发- ios学习资源
- IOS开发之——颜色设置
- IOS开发-phonegap及免证书及真机调试