UIButton с двумя строками текста в заголовке (numberOfLines=2)
Я пытаюсь сделать UIButton
, который имеет две строки текста в его titleLabel. Это код, который я использую:
UIButton *titleButton = [[UIButton alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
titleButton.titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
[titleButton setTitle:@"This text is very long and should get truncated at the end of the second line" forState:UIControlStateNormal];
titleButton.titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
titleButton.titleLabel.numberOfLines = 2;
[self addSubview:titleButton];
когда я пытаюсь это сделать, текст появляется только на одной строке. Кажется, это единственный способ добиться более одной строки текста в UIButton.titleLabel
- установить numberOfLines=0
и использовать UILineBreakModeWordWrap
. Но это не гарантирует, что текст будет ровно две строки.
через обычный UILabel
, однако, работает:
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
titleLabel.text = @"This text is very long and should get truncated at the end of the second line";
titleLabel.numberOfLines = 2;
titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
[self addSubview:titleLabel];
кто-нибудь знает, как сделать UIButton
работать с двумя линиями? Это единственное решение для создания отдельного UILabel
чтобы удерживать текст и добавить его в качестве подвида кнопки?
6 ответов:
обновленный ответ для более поздних версий iOS
поскольку это принятый ответ, добавлен ответ @Sean здесь:
установите эти свойства в заголовке вашей кнопки.
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.numberOfLines = 2; // if you want unlimited number of lines put 0
Swift 3 и 4:
button.titleLabel?.lineBreakMode = .byWordWrapping button.titleLabel?.numberOfLines = 2 // if you want unlimited number of lines put 0
оригинальный ответ для более старой версии iOS
если вы хотите 2 строки текста на верхней части вашего
UIButton
вы должны добавитьUIlabel
поверх этого, что делает точно что.UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)]; titleLabel.font = [UIFont boldSystemFontOfSize:24.0]; titleLabel.text = @"This text is very long and should get truncated at the end of the second line"; titleLabel.numberOfLines = 2; titleLabel.lineBreakMode = UILineBreakModeTailTruncation; [myButton addSubview:titleLabel]; //add label to button instead.
обновлено для решения interface builder
добавлен ответ @ Borut Tomazin для более полного ответа. Обновил эту часть снова, так как ответ @Borut Tomazin был улучшен.
вы можете сделать это гораздо проще, без кода. В Interface Builder set
Line Break
на UIButton toWord Wrap
. Чем вы можете вставить несколько строк заголовка. Просто ударилOption + Return
клавиши для создания новой строки. Вам также нужно будет добавить это в пользовательский атрибут среды выполнения в Построителе интерфейса:titleLabel.textAlignment Number [1]
вам не нужно добавлять UILabel в UIButton. Вот только лишние предметы и работают.
установите эти свойства в заголовке вашей кнопки.
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.numberOfLines = 2;//if you want unlimited number of lines put 0
Swift:
button.titleLabel!.lineBreakMode = NSLineBreakMode.ByWordWrapping button.titleLabel!.numberOfLines = 2//if you want unlimited number of lines put 0
вы можете сделать это гораздо проще, без кода. В Interface Builder set
Line Break
на UIButton toWord Wrap
. Чем вы можете вставить несколько строк заголовка. Просто ударилOption + Return
клавиши для создания новой строки. Вам также нужно будет добавить это в пользовательский атрибут времени выполнения в Interface Builder:titleLabel.textAlignment Number [1]
Это очень просто. Надеюсь, это поможет...
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.textAlignment = NSTextAlignmentCenter; [button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];
чтобы полностью избежать необходимости редактирования кода и, следовательно, необходимости подкласса вашего представления, в Xcode5 и выше вы можете следовать предложению Борута Томазина:
В Interface Builder (или раскадровки) установить разрыв линии на перенос по словам. Чем вы можете вставить несколько строк заголовка. Просто нажать опции + возвращение клавиши для создания новой строки.
и затем в Пользовательские Атрибуты Времени Выполнения вы можно добавить
путь к ключу:
titleLabel.textAlignment
Тип:Number
Значение:1
Примечание: это может быть не совсем "на будущее" так как мы перевод
UITextAlignmentCenter
константа в ее числовое значение (и эта константа может измениться по мере выпуска новых версий iOS), но она кажется безопасной в ближайшем будущем.