对于一个给定的字符串,我想对字符串最大宽度有个限制,如果超过了就像 label 那样用尾截断, 类似 v2e... 这种,现在是不断减最尾字符测宽度来做的。有什么更好的解决方法吗?

对于一个给定的字符串,我想对字符串最大宽度有个限制,如果超过了就像 label 那样用尾截断, 类似 v2e... 这种,现在是不断减最尾字符测宽度来做的。有什么更好的解决方法吗?
1 babyname Aug 26, 2015 func mySubstring (string, length ) if string.length > length return string.substring (0, length ) + "..." else return string |
3 ljbha007 Aug 26, 2015 没有 |
5 VinKing Aug 26, 2015 css 截断? |
6 vitovan Aug 26, 2015 via Android |
7 cnhongwei Aug 26, 2015 如果是在网页中显示,可以使用 css 实现就行了,如果是后台, java 的话,可以有一个取巧的办法,就是使用 gbk 编码转为 byte 数组,刚好汉字是两个字节,而英文是一个字符,取固定的字节长度,再转回来就行了,因为可能会有一个字符只取到一半的情况,所以你可以多取一个字节,转回来后去掉最后一个字符。 如果你还有其它的特殊字符,那就没有办法了,理论上讲,宽度是和字体相关的,只有通过绘制字体,才知道真的有多宽。 |
8 viowan Aug 26, 2015 网页上面?可以试试 text-overflow: ellipsis; 不过这个是 CSS3 里面的,以前的感觉只能用 overflow 之类的来实现了. |
9 bigcoon Aug 26, 2015 via iPhone 自己计算字符串长度 中文字符算长度 2 |
10 TakanashiAzusa Aug 26, 2015 宽度。。这个还和前端字体有关系啊。。一定要弄的话给前端做比较好。。 |
11 Lockerios Aug 26, 2015 一个 Label (显示文本),然后在上层的最右侧盖一个和父视图同底色的 Label (显示 "...") 恩,坑了些... 其实可以继承一个 UILabel 子类,然后重写 ``` - (void )drawRect:(CGRect )rect; ``` 在其中使用 ``` - (void )drawInRect:(CGRect )rect withAttributes:(NSDictionary *)attrs NS_AVAILABLE_IOS (7_0 ); ``` 来绘制上文本,这样根据绘制时候的 Frame 就可以控制显示的方式了。 这个或许是可行的。 |
13 CodeDrift Aug 26, 2015 |
14 quix Aug 26, 2015 ruby 的话 有这么个 gem https://github.com/janlelis/unicode-display_width |
15 loginv2 Aug 26, 2015 正则匹配 /.{你要的长度}/us 然后拼接上 “....” |
17 holystrike Aug 26, 2015 弄个中英文等宽字体, 1 汉字 2 英文字母宽,然后截字 |
18 tabris17 Aug 26, 2015 英文使用等宽字体或者全角英文字母,这样才算得出字宽 |
19 BB9z Aug 26, 2015 精密的实现可以用 Core Text ,这有个关联的参考: http://stackoverflow.com/questions/21938643/how-to-get-the-rect-of-the-last-character-using-core-text |
20 rannie OP @holystrike 如果有特殊符号就不行了 这么算不好 |
21 holystrike Aug 27, 2015 @rannie 符号也是一样的等宽嘛,例如标准宋体 |