iOS Xcode UILabel右边缘出现黑线
2016-08-23 11:36
961 查看
偶尔发现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);
相关文章推荐
- iOS中UILabel设置可变长度并加圆角后尾部出现黑线
- iOS UILabel 边框出现黑线问题
- iOS控件UILabel自适应高度过程中,某一边出现了黑线的处理方法
- iOS开发 - Xcode7下解决使用三方库出现的warning问题
- iOS Xcode为Subview设置的约束条件在iOS 8 & Xcode 6中出现异常
- xcode ios项目出现编译问题的解决办法
- iOS工程中Xcode出现my mac 64-bit错误
- ios方便的开发模式: Xcode调试、UIlabel、view控件等
- Xcode 7.0过后,也就是iOS9.0过后适配时出现的问题
- iOS工程中Xcode出现my mac 64-bit错误
- IOS开发笔记之七——Xcode 6.0.1下出现Thread 1: signal SIGPIPE问题的参考解决方案
- Xcode 安装不了文档,出现 Could not download and install iOS 8. The certificate for this server is invalid...
- XCode编译Iphone出现的问题:code signing is required for product type 'Application' in SDK 'iOS 4.3'
- iOS 中使用 XIB 自定义cell 的两种方法 以及 编译出现常见 的错误 ++++(xcode6.0之后)
- IOS 真机测试 Xcode出现"The identity used to sign the executable is no longer valid"
- Xcode 4.5运行时出现iOS 模拟器找不到SDK
- iOS工程中Xcode出现my mac 64-bit错误
- 【转】总结:升级到xcode4.2 iOS sdk 5.0旧版工程编译后出现的警告解决办法
- 关于IOS开发工具XCode工具出现 OS APPle LLVM 5.02 error问题
- 使用Xcode6.1.1打包出现Your account already has a valid iOS Distribution certificate问题