Знайте, где UILabel разбивает строку, когда его многострочное свойство включено

Возникла проблема, нужно присвоить некоторый текст заголовку UIButton. Установите режим разрыва строки кнопок на NSLineBreakByCharWrapping, чтобы строка разделялась только символами в конце каждой строки. Но мне нужно вставить дефис в конце строки, чтобы показать непрерывность слова. Вот что я пробовал -

    // Initialize the button

    titleButton.titleLabel.lineBreakMode = NSLineBreakByCharWrapping;
    titleButton.titleLabel.backgroundColor = [UIColor yellowColor];
    [titleButton.titleLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:15]];

    // Make the string here
    NSMutableString *titleString = [[NSMutableString alloc] initWithString:@"abcdefghijklmnopqrs tuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"];
        // Insert hyphens 
        int titleLength = [titleString length];
        int hyphenIndex = 19;
        while (hyphenIndex<titleLength) { 
            UniChar charatIndex = [titleString characterAtIndex:hyphenIndex];
            if ((charatIndex - ' ') != 0) { // Check if its not a break bw two words
                [titleString insertString:@"-" atIndex:hyphenIndex]; // else insert an hyphen to  indicate word continuity
            }
            hyphenIndex += 19; //Since exactly 20 char are shown in single line of the button's label. 
        }
        //Set the hyphenated title for the button
        [titleButton setTitle:titleString forState:UIControlStateNormal];
        [titleString release];

Это самое близкое, что я мог получить.

введите здесь описание изображения

Любая помощь будет принята с благодарностью.


person nuteron    schedule 09.01.2013    source источник
comment
см. этот ответ. Это даст вам массив строк UILabel.   -  person TheTiger    schedule 06.08.2013
comment
Пожалуйста, перейдите по этой ссылке, это поможет вам stackoverflow.com/a/38146955/4940425   -  person Binoy jose    schedule 01.07.2016


Ответы (4)


длина вашего второго слова больше длины строки (ширины кнопки), поэтому это происходит.

person Amit Battan    schedule 09.01.2013

вставка дефисов не очень хорошая идея. Вы должны разделить свою строку на части с размером, который соответствует ширине кнопки, используя, чем добавлять дефисы, если это необходимо.

[String sizeWithFont:font constrainedToSize:Size lineBreakMode:LineBreakMode]

Основная идея состоит в том, чтобы получить часть исходной строки (добавить дефис, если слово разрывается), проверить, соответствует ли ее ширина ширине кнопки. Если ширина меньше, попробуйте большую часть, иначе, если подходит, обработайте следующую часть

person mike-dutka    schedule 09.01.2013
comment
Это то, что я пробовал, но не получил точного результата. Ошибка примерно один символ.. - person nuteron; 11.01.2013

Попробуйте NSAttributedString

Это дает большие возможности для работы со строками.

WWDC 2012-230

Например:

- (NSUInteger)lineBreakBeforeIndex:(NSUInteger)index withinRange:(NSRange)aRange
//Returns the appropriate line break when the character at the index won’t fit on the same line as the character at the beginning of the range.
person Flop    schedule 06.08.2013
comment
Я подозреваю, что за это проголосовали, потому что метод lineBreakBeforeIndex, похоже, предназначен только для OS X, а вопрос помечен как iOS. Тем не менее, полезный ответ для людей с OS X :) - person Kenny Winker; 17.10.2013

См. мой ответ здесь о том, как использовать NSParagraphStyle и NSAttributedString для получения UILabel, который разбивается на дефисы: https://stackoverflow.com/a/19414663/196358

person Kenny Winker    schedule 16.10.2013