Я пытаюсь создать объект UIButton
с двумя строками текста в заголовкеLabel. Это код, который я использую:
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
текст для хранения и добавить его в качестве подпредставления кнопки?
objective-c
ios
uibutton
uilabel
маркетолог
источник
источник
numberOfLines=0
и использоватьUILineBreakModeWordWrap
, можно получить несколько строк. Проблема в том, что если текст будет слишком длинным, он может дать больше двух строк. Мне нужно ровно два одиночных символа с точками в конце второй строки (если текст слишком длинный).Ответы:
Обновленный ответ для более поздних версий iOS
Поскольку это принятый ответ, здесь добавлен ответ @Son:
Установите эти свойства в titleLabel вашей кнопки.
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
Если вы хотите, чтобы наверху были две строки текста,
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.
Обновлено для решения для построения интерфейсов
Добавлен ответ @Borut Tomazin для более полного ответа. Обновил эту часть еще раз, так как ответ @Borut Tomazin был улучшен.
Вы можете сделать это намного проще, без кода. В Interface Builder установите
Line Break
для UIButton значениеWord Wrap
. Затем вы можете вставить несколько строк заголовка. Просто нажимайтеOption + Return
клавиши, чтобы создать новую строку. Вам также нужно будет добавить это к определяемому пользователем атрибуту времени выполнения в Interface Builder:titleLabel.textAlignment Number [1]
источник
UILineBreakMode
устарели, используйтеNSLineBreakMode
вместо негоВам не нужно добавлять UILabel в UIButton. Вот только лишние предметы и работа.
Установите эти свойства в titleLabel вашей кнопки.
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
источник
intrinsicContentSize
, которое по-прежнему возвращает высоту, соответствующую только одной строке текста. Я исправил это, переопределив кнопку, наintrinsicContentSize
которой я установил высоту[self.titleLabel sizeThatFits(CGSizeMake(self.titleLabel.frame.size.width, CGFLOAT_MAX)].height
.Вы можете сделать это намного проще, без кода. В Interface Builder установите
Line Break
для UIButton значениеWord Wrap
. Затем вы можете вставить несколько строк заголовка. Просто нажимайтеOption + Return
клавиши, чтобы создать новую строку. Вам также нужно будет добавить это к определяемому пользователем атрибуту времени выполнения в Interface Builder:titleLabel.textAlignment Number [1]
Это так просто. Надеюсь, это поможет...
источник
titleLabel.textAlignment
пользователем атрибут времени выполнения в Interface Builder и установив его на Number = 1 (значение NSTextAlignmentCenter).button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.textAlignment = NSTextAlignmentCenter; [button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];
источник
NSString
внутреннюю частьsetTitle
. WordWrapping делает это за вас!Чтобы полностью избежать необходимости редактировать код и, следовательно, создавать подклассы вашего представления, в Xcode5 и выше вы можете следовать предложению Борута Томазина:
а затем в определяемых пользователем атрибутах времени выполнения вы можете добавить
Путь ключа:
titleLabel.textAlignment
Тип:
Number
Значение:
1
Примечание: это может быть не полностью «перспективным», поскольку мы переводим
UITextAlignmentCenter
константу в ее числовое значение (и эта константа может измениться по мере выпуска новых версий iOS), но в ближайшем будущем это кажется безопасным.источник
Вы можете изменить необходимое значение прямо из раскадровки. Нажмите кнопку, перейдите к инспектору удостоверений и добавьте следующую пару "ключ-значение" в раздел «Пользовательские атрибуты среды выполнения»:
источник