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