请教一个名称截断的方法

2015-08-26 09:34:34 +08:00
 rannie

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

3316 次点击
所在节点    iDev
21 条回复
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
rannie
2015-08-26 09:39:54 +08:00
@babyname 可能我说的不清楚 是宽度 不是字符串长度 因为里面有符号或者中英文 所以长度这个不合适吧
ljbha007
2015-08-26 09:41:10 +08:00
没有
babyname
2015-08-26 09:42:01 +08:00
@rannie 嗯,宽度就不行了
VinKing
2015-08-26 09:54:06 +08:00
css 截断?
vitovan
2015-08-26 09:57:22 +08:00
cnhongwei
2015-08-26 09:58:50 +08:00
如果是在网页中显示,可以使用 css 实现就行了,如果是后台, java 的话,可以有一个取巧的办法,就是使用 gbk 编码转为 byte 数组,刚好汉字是两个字节,而英文是一个字符,取固定的字节长度,再转回来就行了,因为可能会有一个字符只取到一半的情况,所以你可以多取一个字节,转回来后去掉最后一个字符。

如果你还有其它的特殊字符,那就没有办法了,理论上讲,宽度是和字体相关的,只有通过绘制字体,才知道真的有多宽。
viowan
2015-08-26 09:58:59 +08:00
网页上面?可以试试 text-overflow: ellipsis; 不过这个是 CSS3 里面的,以前的感觉只能用 overflow 之类的来实现了.
bigcoon
2015-08-26 10:00:16 +08:00
自己计算字符串长度 中文字符算长度 2
TakanashiAzusa
2015-08-26 10:02:08 +08:00
宽度。。这个还和前端字体有关系啊。。一定要弄的话给前端做比较好。。
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 就可以控制显示的方式了。

这个或许是可行的。
rannie
2015-08-26 11:03:57 +08:00
@Lockerios 我就是想要 label 的效果,如果这样的话 我直接用 label 不就好了 都不用 drawRect...
Anybfans
2015-08-26 12:10:25 +08:00
quix
2015-08-26 13:00:05 +08:00
loginv2
2015-08-26 13:30:06 +08:00
正则匹配 /.{你要的长度}/us 然后拼接上 “....”
Lockerios
2015-08-26 15:55:01 +08:00
@rannie oUo 之前没理解成功。
holystrike
2015-08-26 15:58:27 +08:00
弄个中英文等宽字体, 1 汉字 2 英文字母宽,然后截字
tabris17
2015-08-26 18:15:58 +08:00
英文使用等宽字体或者全角英文字母,这样才算得出字宽
BB9z
2015-08-26 23:43:07 +08:00
rannie
2015-08-27 15:30:10 +08:00
@holystrike 如果有特殊符号就不行了 这么算不好

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/216019

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX