UITextView在UITableViewCell上的动态改变高度

绘色IP属地: 湖南
字数 294阅读 755

效果图

Dec-04-2019 16-40-11.gif

一开始就是想着在用户每次输入完一个字符的时候,都去计算一下高度。
我使用的是textView的textViewDidChange这个代理方法。

func textViewDidChange(_ textView: UITextView) {

        print(textView.text)

        self.textViewHeight = textView.sizeThatFits(CGSize(width: textView.frame.size.width, height: CGFloat(MAXFLOAT))).height
        if self.textViewHeight < 20 {
            self.textViewHeight = 20
        }
        self.delegate?.textInputHeightChange(height: textViewHeight, text: textView.text , cell : self)
    }

然后在外层代理调用,刷新列表方法进行刷新

self.prescriptionListTableView?.reloadRows(at: [IndexPath(row: 0, section: 0)], with: .none)

我在改变高度之后,外部刷新tableView用的是reloadRows方法,本来是没有什么问题的,然后我就开开心心提测了。
然后就悲剧了:(

悲剧原因就是,因为测试手机装的输入法是iOS自带的输入法,iOS原生输入法,和其他输入法不一样的是的地方就是在输入中文的时候,会把正在输入的汉字的拼音先录入到输入框中,这就导致了,输入进输入框的全是汉语拼音。

原因是,在reloadRows的时候,tableView会走一遍cellForRow的代理方法,对textView进行了重新赋值
解决方法:不用reloadRows进行刷新,改为

self.prescriptionListTableView?.beginUpdates()
self.prescriptionListTableView?.endUpdates()

这种刷新方式tableView会只调用heightForRow的代理,而不会走cellForRow的代理方法:)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
0人点赞
更多精彩内容,就在简书APP
"小礼物走一走,来简书关注我"
还没有人赞赏,支持一下
绘色不积跬步,无以至千里;不积小流,无以成江海。
总资产15共写了2108字获得11个赞共2个粉丝