UIButton многострочный текст с усечением хвоста - PullRequest
7 голосов
/ 22 марта 2011

Я нашел похожие вопросы, в которых спрашивается, как сделать многострочный текст на кнопке UIB, и решение состоит в том, чтобы установить

[myUIButton.titleLabel setLineBreakMode:UILineBreakModeWordWrap];
[myUIButton setTitle:myTitle forState:UIControlStateNormal];

Однако это приводит к тому, что заголовок кнопки занимает много строк.Я попытался ограничить количество строк, используя

[myUIButton.titleLabel setNumberOfLines:2];

, но это никак не повлияет на итоговое количество строк.

Есть ли способ ограничить количество строк, заключенных в 2?строки в заголовке UIButton, а затем хвост обрезается с помощью "..."?

Ответы [ 3 ]

8 голосов
/ 27 мая 2015

Установив lineBreakMode перед numberOfLines, можно достичь желаемого результата ... Это потому, что lineBreakMode, кажется, отменяет набор numberOfLines, следовательно, мы делаем это в следующем порядке.

Objective-C:

[button.titleLabel setLineBreakMode: UILineBreakModeTailTruncation];
[button.titleLabel setNumberOfLines:2];
[button setTitle:myTitle forState:UIControlStateNormal];

Swift 3: от Xcode 6 и выше UILineBreakMode заменяется на NSLineBreakMode

button.titleLabel?.lineBreakMode = NSLineBreakMode.byTruncatingTail
button.titleLabel?.numberOfLines = 2
button.setTitle(myTitle, for: UIControlState.normal)
3 голосов
/ 29 января 2013

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

Решение, которое работало для меня, было следующим:

// Set the line break mode to word wrap so it won't truncate automatically
[button.titleLabel setLineBreakMode: UILineBreakModeWordWrap];

// Call a method that truncates the string I want to use
[button setTitle:[self truncateString:myButtonText] forState:UIControlStateNormal];

И метод truncateString:

- (NSString *)truncateString:(NSString *)stringToTruncate
{
    if ([stringToTruncate length] > 50)
        stringToTruncate = [[stringToTruncate substringToIndex:50] stringByAppendingString:@"..."];

    return  stringToTruncate;
}

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

1 голос
/ 19 февраля 2013
[button.titleLabel setNumberOfLines:2];
[button.titleLabel setLineBreakMode: UILineBreakModeTailTruncation];
[button setTitle:myTitle forState:UIControlStateNormal];

это делает это для меня! : D ура !!

...