在标题中有两行文本的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
工作两行? 是唯一的解决scheme来创build一个单独的UILabel
来保存文本,并添加它作为button的子视图?
更新了更新的iOS版本的答案
既然这是被接受的答案,在这里增加@肖恩的答案:
在button的titleLabel上设置这些属性。
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.numberOfLines = 2; // if you want unlimited number of lines put 0
斯威夫特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.
更新了界面生成器解决scheme
添加@Borut Tomazin的答案更完整的答案。 自从@Borut Tomazin的答案得到改善后,又重新更新了这个部分。
你可以做得更容易,无需代码。 在界面生成器中将UIButton Word Wrap
Line Break
设置为Word Wrap
。 比你可以插入多行标题。 只需点击Option + Return
键即可换行。 您还需要将其添加到Interface Builder中的“用户定义的运行时”属性中:
titleLabel.textAlignment Number [1]
你不需要添加一个UILabel到UIButton。 这只是额外的对象和工作。
在button的titleLabel上设置这些属性。
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.numberOfLines = 2;//if you want unlimited number of lines put 0
迅速:
button.titleLabel!.lineBreakMode = NSLineBreakMode.ByWordWrapping button.titleLabel!.numberOfLines = 2//if you want unlimited number of lines put 0
你可以做得更容易,无需代码。 在界面生成器中将UIButton Word Wrap
Line Break
设置为Word Wrap
。 比你可以插入多行标题。 只需点击Option + Return
键即可换行。 您还需要将其添加到Interface Builder中的“用户定义的运行时”属性中:
titleLabel.textAlignment Number [1]
就这么简单。 希望能帮助到你…
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.textAlignment = NSTextAlignmentCenter; [button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];
为了完全避免编辑代码的需要,从而需要inheritance您的视图,在Xcode5和更高版本中,您可以按照Borut Tomazin的build议:
在界面生成器(或故事板)中设置换行到Word Wrap。 比你可以插入多行标题。 只需点击Option + Return键即可换行。
然后在用户定义的运行时属性中添加
关键path: titleLabel.textAlignment
types: Number
价值: 1
注意:由于我们正在将UITextAlignmentCenter
常量转换为其数值(这个常量可能会随着新的iOS版本的发布而变化),所以这可能不完全是“未来的certificate”,但在不久的将来似乎是安全的。