2014-09-23 68 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; 

你的代碼