2014-01-13 5 views
6

Я пытаюсь нарисовать эллипсированный текст на нескольких строках внутри прямоугольника.Многострочный текст, не получающий многоточие

Для NSLineBreakByTruncatingTail, документация утверждает

отображается линия, так что начало помещается в контейнер и недостающий текст в конце строки обозначается многоточием глифа. Хотя этот режим работает для многострочного текста, он чаще используется для текста с одной строкой.

, но с этим режимом я получаю только одну строку:

With NSLineBreakByTruncatingTail

Однако с NSLineBreakByWordWrapping, я не получаю многоточие для текста слишком длинным:

With NSLineBreakByWordWrapping

Оба изображения используют один и тот же код ниже (красный фон - прямоугольник рисования текста) и, конечно, тот же размер прямоугольника, поэтому 2 строки должны d еконечно подойдет.

NSMutableParagraphStyle* paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; 
paragraphStyle.lineBreakMode = <<see above>>; 
paragraphStyle.alignment = NSTextAlignmentNatural; 
NSDictionary* drawingAttributes = [NSDictionary dictionaryWithObjectsAndKeys: 
            [UIFont fontWithName:@"HelveticaNeue" size:36], 
            NSFontAttributeName, 
            paragraphStyle, 
            NSParagraphStyleAttributeName, 
            nil]; 

const CGRect rect = CGRectMake(...); 
[@"I do not get ellipsized in any way" drawInRect:rect withAttributes:drawingAttributes]; 

Есть ли способ объединить ellipsizing с многострочным рендеринга, как и сказано в документации? С помощью UILabel мне нужно было бы только установить количество строк на что-то отличное от 1, но как насчет текстового рендеринга через код?

+0

Я считаю, что многострочный означает ... полосу прокрутки. И вы хотите 2 строки текстового поля. Таким образом, вы можете создать два textField, один нормальный другой усеченный хвост. –

+0

Речь идет не об управлении пользовательским интерфейсом, а об обработке текста через код! – AndiDog

+0

да, но текст будет отображаться в некоторых пользовательских интерфейсах. И ТОЛЬКО пользовательский интерфейс покажет в любом случае. если у вас есть два пользовательских интерфейса, это можно сделать. или, возможно, вам нужно создать пользовательский интерфейс с этим requiremnt. –

ответ

1

Я не понимаю, почему вы используете NSMutableParagraphStyle и drawInRect, возможно, мне понадобится дополнительная информация о контексте, который вы пытаетесь работать.

Но используя эту простую технику:

UILabel *label = [[UILabel alloc] initWithFrame:(CGRect){0,0,300,100}]; 
label.numberOfLines = 0; 
label.backgroundColor = [UIColor redColor]; 
label.center = self.view.center; 
label.font = [UIFont fontWithName:@"HelveticaNeue" size:36]; 
label.textAlignment = NSTextAlignmentNatural; 
label.lineBreakMode = NSLineBreakByTruncatingTail; 
label.text = @"I do not get ellipsized in any way"; 

[self.view addSubview:label]; 

Вы увидите следующий результат: enter image description here

Мое предложение, чтобы избавиться от drawInRect в этом случае.

Смежные вопросы