先说什么叫自动断字吧
看图说话吧,图片来自网络

我们的APP里经常会遇到这种情况,如果没有断字,排版(如上图左侧)看起来效果不好。
那能不能像Word里那样排版呢。
先说第一种方案,也就是参考文章1 iOS中自动断字(hyphenationFactor)的使用 中提到的,
我这里不写了,做法看这篇文章吧
hyphenationFactor 使用这个属性,
这个方案有一个不好的地方,需要给NSLocale加了个Category,把APP的NSLocale默认到英文,这是因为hyphenationFactor有个限制,可以参考Dev里的

我的APP不允许我修改,因为我还有其它地方会需要用到NSLocale 的 preferredLanguages
现在说一下另一种方案
参考2)Hyphenation in native iOS app
给NSString加个Category,不加也行,加就是为了通用
参考NSString+SoftHyphenation 代码 (简书上放代码格式太难控制了,还是直接放在github上吧)
说一个用法吧
这里给NSString加了一个方法softHyphenatedString
对于原来需要展示在UILabel(或其它)上的文本,先执行
uiLabel.text = [text softHyphenatedString];
就OK了,
再说一下原理吧,不想了解的同学也可跳转,
NSString+SoftHyphenation
主要用到 CFStringGetHyphenationLocationBeforeIndex 找到需要加连字符的位置,标记出来,
再在这个位置插入一个字符 ‘\u00AD’,这是一个控制字符
代码0xAD是一个软连字元(表示除非在行尾断开单词时使用,否则不显示)(参考:扩展ASCII百科)
到这里应该明白了吧,加入了一个只有在需要时才会显示的字符,符合我们的期望。
看一下效果

参考文章:
1)iOS中自动断字(hyphenationFactor)的使用
网友评论