iOS Xcode UILabel右边缘出现黑线

偶尔发现UILabel右边缘出现黑线,iPhone6P、6sP最为明显

用Xcode的debug view hierarchy仔细看了多遍,都没毛病,层次分明,该Hidden的hide了,该透明的透明了,只有这条线完全不知怎么回事儿。

  • 猜测1 border
    怀疑label.layer.border有问题,导致出现黑线,但是border是UIView.layer的边缘上的一条线,四条边都有才对。现在的问题是只有右边有线,排除之。
  • 猜测2 UILabel.attributeString
    因为UI指定了该Label的行间距,所以这里的label.text使用UILabel.attributeString来赋值,怀疑是attributeString的副作用。然而换成label.text后,仍然有相同的问题。

    绞尽脑汁苦想半天,一筹莫展,于是我假装没看见这个bug,继续coding别的梦想去….直到几天后,团队中另一位大牛发现了这个问题。他兴致勃勃的跟我谈这个bug,跟我一样,他也试了N个猜想,都不是真正的原因,但不同的是,他对疑难杂症有一种偏执的热爱。所以,当我看到他眼中充满兴奋的绿光时,我也被他感染了,我们同仇敌忾跟这条黑线死磕到底!
    功夫不负有心人,终于从某技术论坛发现正解:

    使用循环计算label尺寸, 循环创建label时有可能出现右边缘黑线的问题,
    且有时在iPhone5s一下机型不会出现, 只在iPhone6以上出现
    这是因为计算出得size可能的值会是30.31123323…… 这样的数,
    猜想: 而像素值显示的时候不可能出现显示半个像素的情况, 那么不足一个像素的值就会被忽略掉, 在分辨率较低的机型上不会出现, 而分辨率较高的则不会忽略, 就出现了黑线。

解决方法

计算出来的UILabel尺寸,向上取整

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init];
    paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping ;
    [paragraphStyle setLineSpacing:4];
    NSDictionary *attributes = @{NSFontAttributeName:kDesFont, NSParagraphStyleAttributeName:paragraphStyle.copy};

    CGSize size = [ des boundingRectWithSize:CGSizeMake(cellWidth, 0) options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:attributes context:nil ].size ;
size.width = ceil(size.width);
size.height = ceil(height);
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值