如题
比如
这个UIlabel 本该显示成
顶顶顶顶顶顶顶顶顶顶的大多数是是是是
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
谁谁谁水水水水是是是是是是是是是是撒
大多数是山东省撒打算打算打算打算的收
水电费第三方第三方说的发送到发送到范
水电费第三方士大夫士大夫。
但是 现在业务要求最多显示3行 如果小于3行有多少航显示多少行 超过三行的话显示如下
顶顶顶顶顶顶顶顶顶顶的大多数是是是是
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
谁谁谁水水水水是是是是是是是...展开
其中展开是蓝色 一点击...展开才变成
顶顶顶顶顶顶顶顶顶顶的大多数是是是是
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
谁谁谁水水水水是是是是是是是是是是撒
大多数是山东省撒打算打算打算打算的收
水电费第三方第三方说的发送到发送到范
水电费第三方士大夫士大夫。
我现在虽然到达了效果 但是方法比较复杂 且有时候还有问题 我想想问问大家 有没有什么好办法 好思路 最好有代码可以参考 谢谢了
天蓬老师2017-04-17 17:34:19
윗글 글자 수를 제한하는 것은 실용적이지 않습니다. 한자는 너비가 동일하지만 1과 8, 1과 1, i와 u, W와 I 등 다른 문자의 너비는 일치하지 않습니다. .
이 문제는 CoreText를 사용해야 합니다. 인터넷에 이런 종류의 AttributeLabel이 있습니다. 먼저 코드를 다운로드하여 직접 살펴보겠습니다. 저희 프로젝트 이전에 온라인에서 다운로드 받아 직접 수정한 코드를 보시고 말씀하신 내용과 조금 비슷하네요.. 방금 추가한 내용입니다... 참고로 다음 방법은 라벨을 커스터마이징하는 방법입니다
ringa_lee2017-04-17 17:34:19
이 요구 사항은 실제로 약간 어렵습니다. 저라면 두 가지 대체 방법을 사용할 수 있습니다.
3줄로 제한하는 대신 단어 수를 50단어 등 3줄 이내로 제한합니다. 그런 다음 문자열을 자르고 "..."로 철자를 쓴 다음 "확장"합니다. , TTTAttributedlabel
를 사용하면 클릭 이벤트를 추가할 수 있습니다. 단어 수는 여러 화면 너비에 따라 개별적으로 결정될 수도 있습니다.
'확장'을 라벨 범위 밖으로 이동하고 라벨의 줄 수를 3으로 제한한 다음 '확장'이 별도의 버튼이므로 바깥에 두세요...
이것을 구현해야 한다면... 제가 생각할 수 있는 방법은 아마도 3줄 정도의 범위에서 문자열을 처음부터 끝까지 스캔하는 것입니다(예: 40단어에서 60단어까지). 먼저 하위 문자열을 만든 다음 계산합니다. 4줄이 될 때까지의boundingRect 높이입니다. 이전 텍스트는 정확히 3줄을 채우고 몇 단어를 더 잘라낸 다음 "..." 철자를 입력하고 "Expand" 철자를 입력합니다. 하지만boundingRect를 계산하는 방법은 상대적으로 느리기 때문에 확실히 매우 비효율적입니다. 별로 권장되지 않습니다.