2014-09-23 122 views
1

我刚刚在多个iOS 8设备上构建了我的项目,其中的baseSDK设置为iOS 7.1。 不幸的是,作为属性添加到NSMutableAttributedString相关实例的所有NSTextAttachment图像都隐藏在iOS 8设备和iOS 8模拟器上(它们在7.1和iOS 7.1模拟器的设备上仍然可见)。这些字符串在其超级视图中的框架被设置为如果图像存在,但图像本身不可见或呈现。NSTextAttachment图像不显示在iOS 8设备上(使用iOS7.1 sdk)

是否有其他人遇到过没有出现在iOS 8上的文本附件问题?如果有,是否有解决方法?如果没有,我的代码有问题(粘贴在下面)?这个实例特别为UIButton设置了一个归属标题,但是我还有其他一些带有简单UILabels附件的实例显示了相同的行为。

NSMutableAttributedString *attrButtonTitle = [[NSMutableAttributedString alloc] initWithString:@"Let's go!"]; 
NSTextAttachment *doubleArrowIcon = [[NSTextAttachment alloc] initWithData:nil ofType:nil]; 
doubleArrowIcon.image = [UIImage imageNamed:@"double-arrows"]; 
[attrButtonTitle appendAttributedString:[[NSAttributedString alloc] initWithString:@" " attributes:@{NSAttachmentAttributeName : doubleArrowIcon, NSBaselineOffsetAttributeName : @(-2)}]]; 
[self.nextButton setAttributedTitle:attrButtonTitle forState:UIControlStateNormal]; 

注意:我会张贴图片来说明我是否可以,但是我没有最低的堆栈溢出声誉来这样做。

回答

2

我仍然不确定为什么上述代码在使用7.1 SDK进行编译时不能在iOS8设备上显示图像,但我找到了解决方法。我尝试了不同的NSMutableAttributedString初始化方法,它有一个文本附件,直到我找到了能够完成这项工作的东西。下面的代码:

NSTextAttachment *doubleArrowIcon = [[NSTextAttachment alloc] initWithData:nil ofType:nil]; 
doubleArrowIcon.image = [UIImage imageNamed:@"double-arrows"]; 

NSAttributedString *textAttachment = [NSAttributedString attributedStringWithAttachment:doubleArrowIcon]; 

NSMutableAttributedString *mutableTextAttachment = [[NSMutableAttributedString alloc] initWithAttributedString:textAttachment]; 
[mutableTextAttachment addAttribute:NSBaselineOffsetAttributeName value:[NSNumber numberWithInt:-2] range:NSMakeRange(0, [textAttachment length]) ]; 
[attrButtonTitle appendAttributedString:mutableTextAttachment]; 
0

如果图像仍然没有良好的初始化后显示,它与您的标签/文本的lineBreakMode问题。 lineBreak不能/不能切割图像。

只需添加

yourlabel.text.lineBreakMode = NSLineBreakByClipping; 

你的代码