В UILabel не работают разрывы строк - PullRequest
5 голосов
/ 31 марта 2010

Я загружаю некоторый текст справки из списка и отображаю его в форме UILabels, размещенной в UIScrollView. Часть кода выглядит следующим образом:

</p> <pre><code> UILabel *sectionDetailLabel = [[[UILabel alloc] initWithFrame:CGRectMake(34, myOriginForThisSection, 286, 20)] autorelease]; sectionDetailLabel.backgroundColor = [UIColor clearColor]; sectionDetailLabel.numberOfLines = 0; sectionDetailLabel.font = [UIFont systemFontOfSize:12]; sectionDetailLabel.textColor = [UIColor blackColor]; sectionDetailLabel.textAlignment = UITextAlignmentLeft; sectionDetailLabel.lineBreakMode = UILineBreakModeWordWrap; [baseScrollView addSubview:sectionDetailLabel]; [sectionDetailLabel setText:myStringForThisSection]; [sectionDetailLabel sizeToFit];

Хотя любой «длинный» текст корректно переносится на несколько строк, я не могу вручную вставить любые разрывы строк, используя символы новой строки '\ n' в 'myStringForThisSection'. Вместо этого я вижу только символы «\» и «n», напечатанные в UILabel, где бы я ни хотел перенос строки.

Я искал это, и общее согласие заключалось в том, что установка numberOfLines в 0, установка действительного значения lineBreakMode и вызов sizeToFit (или установка фрейма UILabel на основе sizeWithFont :) должны подойти. Все, что я, кажется, делаю в приведенном выше коде - и прекрасно работает, когда в UILabel вставляются длинные строки неизвестной длины в несколько строк. Так чего здесь не хватает?

Примечание. Все используемые переменные - baseScrollView, myStringForThisSection и myOriginForThisSection - были загружены до того, как вышеуказанный код начал выполняться, и работают нормально.

Ответы [ 3 ]

8 голосов
/ 28 августа 2010

UILabel не интерпретирует escape-последовательность \ n. Вы можете вставить реальный символ, который представляет возврат каретки и / или перевод строки. Создайте символ для перевода строки, а затем вставьте его.

unichar newLine = '\n';
NSString *singleCR = [NSString stringWithCharacters:&newLine length:1];
[myStringForThisSection insertString:singleCR atIndex:somePlaceIWantACR];

Пока ваш myStringForThisSection является изменяемым, он должен это делать.

3 голосов
/ 07 марта 2012

У меня были проблемы с ответом Скотта Густафсона выше в XCode 4.3

Попробуйте вместо этого:

unichar chr[1] = {'\n'};
NSString *cR = [NSString stringWithCharacters:(const unichar *)chr length:1];

Затем используйте в своем коде что-то вроде этого:

self.myLabel.text = [NSString stringWithFormat:@"First Label Line%@Second Label Line", cR];
1 голос
/ 17 сентября 2012

Я не смог заставить работать решение Scott & DoctorG (хотя я не тратил слишком много времени на попытки), но вот простое решение, которое работает для меня, когда я извлекаю экранированный текст из XML-файла.

Внутри моего класса строковых функций я определяю:

+(NSString)escapeXml:(NSString*)string {
    return [string stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...