在标题中有两行文本的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”,但在不久的将来似乎是安全的。