写在前言:
久了没写文章,就会变得越来越懒,还会给自己找各种理由,说自己忙,没时间写文章.其实最近由于受一个很热门的话题困扰-关于程序猿的年龄的思考,自己有些迷茫,思考了半天也不知道如何是好,程序猿真的是吃青春饭的么?不管了,还是坚持2017年的目标,坚持写自己开发日记吧.
之前有个项目里面大量用到了tableview,而且还是表单形式,需要填写一些自定义的数据,UI要求数据输入框要根据内容大小来撑大.很庆幸,现在项目都是从iOS8适配,所以自然想到了AutoLayout以及tableview的estimatedRowHeight特性.
主页面UI.png -w200图中要求标题输入,当输入内容超过设计大小,要自动撑大,下面的选项同理.增加选项可以添加更多选项.本项目的采用的是SD,以第一个标题输入框为例.
一.添加合适的约束
输入框这个Cell的约束添加:
layout.png二.TableView的设置
设置tableview行高的估算高度:
self.tableView.estimatedRowHeight = 50;
self.tableView.rowHeight = UITableViewAutomaticDimension;
三.自定义可编辑Cell中的设置
要想对输入框的实时输入进行输入框的实时改变,就要监听textView的输入事件.
-(void)textViewDidChange:(UITextView *)textView{
CGRect bounds = textView.bounds;
// 计算 text view 的高度
CGSize maxSize = CGSizeMake(bounds.size.width, CGFLOAT_MAX);
CGSize newSize = [textView sizeThatFits:maxSize];
bounds.size = newSize;
textView.bounds = bounds;
// 让 table view 重新计算高度
UITableView *tableView = [self tableView];
[tableView beginUpdates];
[tableView endUpdates];
//输入框输入内容的回调
[self.delegate TextEditCellTextChangeWithContentText:textView.text];
}
//获取当前的cell所属的tableview
- (UITableView *)tableView
{
UIView *tableView = self.superview;
while (![tableView isKindOfClass:[UITableView class]] && tableView) {
tableView = tableView.superview;
}
return (UITableView *)tableView;
}
总结
这样一个自适应的TableViewCell就完成了,是不是很简单.如果上文有什么不对的地方,请大家指出,或者有什么问题,可以给我留言或者发消息,大家一起探讨,共同进步.
写在最后:
最近开始学习Swift了,Swift已经更新到3.0了,已经趋于稳定,发现github上越来越来的开源是Swift写的,已经掉队的感觉,所以的赶紧跟上.后面会写一些学习Swift笔记.
网友评论