2013-12-06 5 views
7

У меня есть UILabel внутри ячейки, которая содержит несколько элементов. Мне нужно, чтобы метка присваивала строку, которая может заполнить высоту метки, т. Е. Переходить на несколько строк, если это необходимо. Мне удалось добиться этого, и если я запускаю приложение на iOS7 это, кажется, просто отлично (игнорировать желтоватый цвет фона): enter image description hereNSAttributed строка в нескольких строках в UILabel

Вот установка из 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; 

где самостоятельно .notificationText - это UILabel, о котором я говорю. В xib-файле для ячейки я установил минимальный размер шрифта на 3 и количество строк до 0. Как я уже говорил, он отлично работает на iOS 7, но на iOS 6 по какой-то причине он не знает, как делать перенос слов по себе и пытается «усечение хвоста», как это режим разрыва строки, который был установлен по умолчанию в XIb, в результате чего в клетке, глядя, как это: enter image description here

Если изменить режим разрыва строки для переноса слов он разбивает приложение на IOS 6 говорится, что:

NSAttributedString invalid for autoresizing, it must have a single spanning paragraph style (or none) with a non-wrapping lineBreakMode. 

Как получить эту работу на IOS 6?

+0

Два комментарии. Во-первых, насколько я понимаю, минимальный размер шрифта не работает для UILabels с числом строк, отличных от 1. Во-вторых, вам, возможно, придется сделать перенос слов самостоятельно. Используйте 'boundingRectWithSize' в вашей атрибутной строке с бесконечной (большой) шириной. Затем разложите текст на строки и добавьте возврат каретки туда, где он им нужен. Не весело, но возможно. – Putz1103

+0

Я не могу этого сделать, потому что текст не является статичным, т. Е. Он исходит из онлайн-сервиса, и я не знаю, где тоже нарушать линии. И загадочным является то, что он работает на iOS7 без использования каких-либо iOS 7 НАСКОЛЬКО МНЕ ИЗВЕСТНО. – damjandd

+0

Они, должно быть, изменили способ работы NSATTributedStrings в iOS7. Так что ничего конкретного, но новые функции в фоновом режиме. И даже с динамическим текстом вы можете отформатировать его любым способом, используя метод, о котором я говорил. Вы получаете текст, назначая его этикетке. Вы можете отформатировать его перед назначением метки (если я не понимаю, как вы заполняете ячейку). – Putz1103

ответ

3

Проблема была с купели я был используя (шрифт Helvetica). Я изменил [AppereanceConfiguration fontMediumWithSize:18] на [UIFont boldSystemFontOfSize:16], и теперь он работает. Я предполагаю, что у него возникли проблемы с вычислением необходимой ширины из-за пользовательского шрифта.

+0

Фактически, когда вы уменьшили размер шрифта, uilabel теперь имеет высоту кадра, необходимую для отображения двух строк. Я думаю, что если вы увеличите размер до 18, даже с системным шрифтом, он будет усекаться, как раньше. Таким образом, вы можете использовать «Helvetica» также с этим размером шрифта для вашего ярлыка. – Ajeet

+0

Нет, я уменьшил размер шрифта для эстетических целей, а не потому, что это была проблема. Он работает даже с 18. – damjandd

12

Вы можете заставить его работать на iOS 6, выполняя именно то, что заявляет компилятор. По какой-то причине вам нужно добавить атрибут NSParagraphStyle к вашему NSAttributedString для того, чтобы это работало на прошивкой 6.

Вы можете сделать это так:

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

Я добавил это в свой код, и он по-прежнему падает с той же ошибкой. – damjandd

+0

, где вы добавили код? убедитесь, что он ПОСЛЕ первоначального метода addAttribute – JustAnotherCoder

+1

@ user2973562 любой прогресс !? Я уверен, что это сработает – JustAnotherCoder

1

попробовать этот

[self.notificationText setAdjustsFontSizeToFitWidth:NO]; 

может быть, даже только для iOS6

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) { //* 
     [self.notificationText setAdjustsFontSizeToFitWidth:NO]; 
} 
Смежные вопросы