美文网首页技术随笔iOS 遇到的问题IOS
最快解决IOS10下HMSegmentedControl文字异常

最快解决IOS10下HMSegmentedControl文字异常

作者: 笑楔信 | 来源:发表于2016-11-04 16:10 被阅读605次

    作者:笑楔信  来自简书

    在Xcode8.1 的 Documentation and API Reference中,我发现CATextLayer的font属性有句话:

    The font property is only used when the string property is not an NSAttributedString.

    只有当string属性不是一个NSAttributedString对象时font属性才被用到

    按理来说,我设了CATextLayer的string为NSAttributedString,那么font是一个无效参数。但是,当我在修改HMSegmentControl文字异常(即:文字小于三个字符时不显示的异常)时发现,我在HMSegmentControl.m(版本1.5.2、版本1.5.3)中- drawRect方法的317行,我添加了titleLayer.font=nil,如下:

    CATextLayer*titleLayer = [CATextLayerlayer];

    titleLayer.frame= rect;

    titleLayer.alignmentMode=kCAAlignmentCenter;

    titleLayer.truncationMode=kCATruncationEnd;

    titleLayer.font=nil;//唯一添加的代码,同时也是该问题的最快解决方式!!!

    titleLayer.string= [selfattributedTitleAtIndex:idx];

    titleLayer.contentsScale= [[UIScreenmainScreen]scale];

    修改后,文字异常消失。

    后记解释:IOS10中,如果CATextLayer的font属性在string赋值为富文本之后真的不起作用,那为何font不置空会(在宽度或文字上)影响string值的正常显示,这很有可能是苹果公司IOS的bug,我已经发了反馈

    补充:经提醒发现大家对异常现象可能不清楚,我这里给出这个bug的图,在下图中,分段控件的前三个分段中文字都是两个字符,而服务申请为四个字符,所有字符给的都是NSAttributedString的类型,但在Iphone7的IOS10下只显示了服务申请(经测必须大于两个字符才显示)的文字,其他三个分段都未显示文字。

    HMSegmentControl异常显示

    相关文章

      网友评论

      • d07285ec8aea:titleLayer.truncationMode=kCATruncationEnd; 把这段代码注释掉 依然能解决你的问题
        笑楔信: @xuaimian 截断尾部模式~,好像是,可惜公司不做ios了,我没mac来验证,我信你
      • 自负的大撸sir:正好碰到这个问题 完美解决 谢楼主!
        笑楔信: @自负的 @自负的大撸sir 很高兴能帮到你
      • 五蕴盛:有什么异常,可以截个图,或者描述清楚一点。小白不懂的
        笑楔信:@五蕴盛 多谢提醒,已在文章末尾加入异常现象及图片~

      本文标题:最快解决IOS10下HMSegmentedControl文字异常

      本文链接:https://www.haomeiwen.com/subject/fuhwuttx.html