UITextView在UITableViewCell上的动态改变高度

UITextView在UITableViewCell上的动态改变高度,第1张

一开始就是想着在用户每次输入完一个字符的时候,都去计算一下高度

我使用的是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的大小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10158986.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存