需求背景
最近在做项目中,有一个场景是这样的,出发城市和到达城市,最多显示5个字符,当字符长度超过5时就显示省略号,不足5时就根据字符的长度显示。
第一反应
看到这个需求的第一反应就是自己先计算出5个字符(我爱我老婆)的长度是多长,然后将UILabel的约束小于这个宽度。这样既能满足自适应宽度,而且宽度大于5时就显示省略号。可当我的字符长度超过5时UILabel的显示内容并不是前5个字符加省略号,有可能是前4个字符加省略号。
思考之后,想想是不是应该把UILabel的最大宽度设置为5个字符加上省略号得到的宽度,这样就会显示5个字符了,可结果和前面并无差别。
那么如何能完美的让UILabel显示超过5个字符的字符串为前五个字符加省略号,我们知道当Label显示的文本过长时,会自动显示省略号,怎么控制从第几个字符开始显示省略号呢,上面我们试验了两种方式都木有实现显示5个字符加省略号,我们是应该算5个字符加省略号的宽度,但我的为啥不行呢,原来默认显示的省略号和我自己输入的那个省略号所占宽度是不一样的,因为自己输入的是英文的(…),这是中文的(…)。其实后面发现UILable的显示那个省略号大概等于一个汉字的宽度,比如说你要最多显示5个字符,你可以把UILabel的宽度设为6个字符需要的宽度,就能实现想要的效果了。
第二种办法就是自己先判断字符是否大于5,如果大于5截取前5个字符,然后自己拼接上省略号,设置为UILabel的text,当然我们UILabel的宽度的约束是不大于5个字符加省略号的宽度。