如题
比如
这个UIlabel 本该显示成
顶顶顶顶顶顶顶顶顶顶的大多数是是是是 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶 谁谁谁水水水水是是是是是是是是是是撒 大多数是山东省撒打算打算打算打算的收 水电费第三方第三方说的发送到发送到范 水电费第三方士大夫士大夫。
但是 现在业务要求最多显示3行 如果小于3行有多少航显示多少行 超过三行的话显示如下
顶顶顶顶顶顶顶顶顶顶的大多数是是是是 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶 谁谁谁水水水水是是是是是是是...展开
其中展开是蓝色 一点击...展开才变成
顶顶顶顶顶顶顶顶顶顶的大多数是是是是 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶 谁谁谁水水水水是是是是是是是是是是撒 大多数是山东省撒打算打算打算打算的收 水电费第三方第三方说的发送到发送到范 水电费第三方士大夫士大夫。
我现在虽然到达了效果 但是方法比较复杂 且有时候还有问题 我想想问问大家 有没有什么好办法 好思路 最好有代码可以参考 谢谢了
楼上限制字数是不实际的,汉字一样的宽度,但是其他字符宽度不一致,比如1和8,一和1,i和u,W和I……
这个问题要用CoreText,手动改排版,网上有这种AttributeLabel先下载代码看看,自己完全手写是很难的,给你看一眼之前我们项目之前网上下的代码又自己改的,跟你这个需求有点像,他这个是只加了...可以参考,下面这个方法是这个自定义lable的方法
这个需求确实有点难。如果是我的话,可能会用两种变通的方法:
不是限制 3 行,而是限制大约不超过 3 行的字数,比如 50 个字,然后字符串截断,拼上『...』,再拼上『展开』,用
TTTAttributedlabel
就可以加点击事件了。字数还可以根据几种屏幕宽度分别决定。把那个『展开』挪到 label 范围外面去,那个 label 的 numberOfLines 限成 3,然后『展开』是一个单独的按钮,放到外面去……
如果非要实现这个…… 我能想到的办法就是把字符串在比较有可能是 3 行的范围内从头到尾扫一遍,比如从 40 个字到 60 个字,先 subString 再算 boundingRect 的 height,直到发现它变成 4 行为止。前面的文字正好填满 3 行,再多截掉几个字,拼上『...』,再拼上『展开』。但是算 boundingRect 的那个方法是比较慢的,这样肯定效率很低。不是很建议用。
你怎么实现的?
我也在找这个控件