NS在UILabel中的多行中分配了字符串

时间:2013-12-06 14:48:56

标签: ios uilabel multiline nsattributedstring

我在单元格内部有UILabel,其中包含多个元素。我需要标签有一个字符串,它可以填充标签的高度,即必要时进入多行。我设法实现了这一点,如果我在iOS7上运行应用程序它似乎很好(忽略黄色背景颜色): enter image description here

以下是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中设置的换行模式,导致单元格如下所示: enter image description here

如果我将换行模式更改为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上运行?

3 个答案:

答案 0 :(得分:13)

您可以通过执行编译器声明的操作来使其在iOS 6上运行。无论出于何种原因,您需要向NSAttributedString添加NSParagraphStyle属性,以便在iOS 6上运行。

你可以这样做:

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
[YourMutableString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [YourMutableString length])];

答案 1 :(得分:3)

问题在于我使用的字体(自定义Helvetica字体)。我为[AppereanceConfiguration fontMediumWithSize:18]更改了[UIFont boldSystemFontOfSize:16],现在可以了。我想由于自定义字体而无法计算必要的宽度。

答案 2 :(得分:1)

试试这个

    [self.notificationText setAdjustsFontSizeToFitWidth:NO];

甚至可能仅适用于iOS 6

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) { //*
       [self.notificationText setAdjustsFontSizeToFitWidth:NO];
}