我在一个包含几个元素的单元格中有一个UILabel.我需要标签来归因于可以填充标签高度的字符串,即如果需要则进入多行.我设法实现了这一点,如果我在iOS7上运行应用程序,它似乎很好(忽略黄色背景颜色):
这是UILabel的设置:
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@ %@",sender,content]]; NSRange selectedRange = NSMakeRange(0,sender.length); // 4 characters,starting at index 22 [string beginEditing]; [string addAttribute:NSFontAttributeName value:[AppereanceConfiguration fontMediumWithSize:18] range:selectedRange]; [string endEditing]; self.notificationText.attributedText = string;
self.notificationText是我正在谈论的UILabel.在单元格的xib文件中,我将最小字体大小设置为3,将行数设置为0.正如我之前所说,它在iOS 7上完美运行,但在iOS 6上由于某种原因它不知道如何在它自己的单词包装上它会尝试“截断尾部”,因为这是默认情况下在xib中设置的换行模式,导致单元格看起来像这样:
如果我将换行模式更改为Word Wrapping,它会崩溃iOS 6上的应用程序,说:
NSAttributedString invalid for autoresizing,it must have a single spanning paragraph style (or none) with a non-wrapping lineBreakMode.
如何让它在iOS 6上运行?
解决方法
您可以通过执行编译器所声明的操作使其在iOS 6上运行.无论出于何种原因,您需要向NSAttributedString添加NSParagraphStyle属性,以便在iOS 6上运行.
你可以这样做:
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; [YourMutableString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0,[YourMutableString length])];