1

我刚刚在几台 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];

注意:如果可以的话,我会发布图片来说明,但我没有这样做的最低堆栈溢出声誉。

4

2 回答 2

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];
于 2014-10-03T18:57:31.720 回答
0

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

只需添加

yourlabel.text.lineBreakMode = NSLineBreakByClipping;

到你的代码

于 2016-07-07T15:19:45.017 回答