StringCalculate icon indicating copy to clipboard operation
StringCalculate copied to clipboard

每个系统渲染像素不一样, 字体大小不同, 换行方式不同时, 考虑过吗?

Open wait10000y opened this issue 7 years ago • 2 comments

我曾写过 直接把cell的显示内容异步生成图片形式显示, 滑动cell时,十分顺畅; 比较适合 新闻类,资源样式固定不变的列表;

wait10000y avatar Jan 10 '19 02:01 wait10000y

作者是根据字符所占宽度来计算总宽度,所以这个问题没必要考虑,在不同的机型上,字符所占宽度也不同,最后计算的总宽度也不同。

woshicainiaohahaha avatar Jan 11 '19 01:01 woshicainiaohahaha

“每个系统渲染像素不一样, 字体大小不同”:

当缓存里面没有这种字体下某字符对应的宽度时,会调用系统方法boundingRect来得到字符的宽度进行缓存的,所以不会因为系统不同,字体不同造成问题。

“换行方式”,需要考虑的问题有以下两个:

  1. 当每一行的末尾容不下一个字符时,会从另起一行开始计算,造成的空余 因为现在的计算方式出于简便是将所有字符相加然后除以单行最大宽度得到行数,所以每一行末尾的空格可能会导致一些误差,但是可以通过在遍历时判断当前行数是否容不下一个字符,将这些换行导致的空余补上,由于是在宽度较小的情况下,行数较多时,容易造成计算误差,需要加上这些判断。但是我们的项目暂时没有发现算错的情况,就暂时没有加。

  2. 有时候两行Label时,第一行没有显示满,末尾空出来一些空格 这是因为这些字全部排在一行,宽度不够,另起一行时,第二行只显示一两个字符会显得很空,所以系统渲染时就挪了几个字符到第二行。这只是系统在行数计算出来以后,对于排版的选择,不会影响我们的高度计算。

NotFound9 avatar Jan 11 '19 02:01 NotFound9