一开始就是想着在用户每次输入完一个字符的时候,都去计算一下高度。
我使用的是textView的textViewDidChange这个代理方法。
然后在外层代理调用,刷新列表方法进行刷新
我在改变高度之后,外部刷新tableView用的是reloadRows方法,本来是没有什么问题的,然后我就开开心心提测了。
然后就悲剧了:(
悲剧原因就是,因为测试手机装的输入法是iOS自带的输入法,iOS原生输入法,和其他输入法不一样的是的地方就是在输入中文的时候,会把正在输入的汉字的拼音先录入到输入框中,这就导致了,输入进输入框的全是汉语拼音。
原因是,在reloadRows的时候,tableView会走一遍cellForRow的代理方法,对textView进行了重新赋值
解决方法:不用reloadRows进行刷新,改为
这种刷新方式tableView会只调用heightForRow的代理,而不会走cellForRow的代理方法:)
不建议用晦涩难懂的pure layout
究竟用代码(masonry)来定约束,还是用xib/storyboard,看个人喜好吧。
需要根据内容来决定要哪些子view的,建议还是用代码。
顺便说个陷阱,hidden掉的元素也会参与布局,这可能是布局抛异常的根源。
在做tableView的时候,我们有时候需要根据cell的高度动态来调整,最近在网上看到一段代码不错,跟大家Share一下。
在
-(UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath )indexPath{
类中获取cell的高度:
CGSize boundSize = CGSizeMake(216, CGFLOAT_MAX);
celltextLabeltext = @"12345678900123456789";
celluserInteractionEnabled = NO;
celltextLabelnumberOfLines = 0;
CGSize requiredSize = [celltextLabeltext sizeWithFont:[UIFont systemFontOfSize:13] constrainedToSize:boundSize lineBreakMode:UILineBreakModeWordWrap];
CGRect rect = cellframe;
rectsizeheight = requiredSizeheight+5;
cellframe = rect;
这时候获取到了cell的高度,然后在
- (CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexPath )indexPath {
类中改变cell的高度:
UITableViewCell cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
NSLog(@"cell height %f",cellframesizeheight);
return cellframesizeheight;
这样以来cell的高度就根据cell里label的内容自动改变啦。
其主要出发点就是我有一个label,然后我要把这个label展示出来,我根据字体的大小还有行数来获取一个高度,这样cell的高度就有啦。
以上就是关于UITextView在UITableViewCell上的动态改变高度全部的内容,包括:UITextView在UITableViewCell上的动态改变高度、请教ios的collectionview cell怎么动态指定高度、如何调整cell的大小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)