iOS 8设备上未显示NSTextAttachment图像(使用iOS7.1 sdk)

时间:2014-09-23 23:31:10

标签: ios ios8 nsmutableattributedstring nstextattachment

我刚刚在几台iOS 8设备上构建了我的项目,其中baseSDK设置为iOS 7.1。 不幸的是,作为属性添加到NSMutableAttributedString的相关实例的所有NSTextAttachment图像都隐藏在iOS 8设备和iOS 8模拟器上(它们仍然在具有7.1和iOS 7.1模拟器的设备上可见)。超视图中这些字符串的框架设置为好像图像在那里,但图像本身不可见或呈现。

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

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 个答案:

答案 0 :(得分: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];

答案 1 :(得分:0)

如果您的图像在良好初始化后仍未显示,则标签/文本的lineBreakMode存在问题。 lineBreak不能/不能剪切图像。

只需添加

yourlabel.text.lineBreakMode = NSLineBreakByClipping;

到你的代码