我正在尝试在其titleLabel中创建一个包含两行文本的UIButton
。这是我正在使用的代码:
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
来保存文本,并将其添加为按钮的子视图吗?
答案 0 :(得分:145)
您无需向UIButton添加UILabel。这只是额外的对象和工作。
在按钮的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
答案 1 :(得分:86)
您可以更轻松地完成此操作,无需任何代码。在Interface Builder中,将UIButton上的Line Break
设置为Word Wrap
。比你可以插入多行标题。只需按Option + Return
键即可创建新行。
您还需要将其添加到Interface Builder中的用户定义的运行时属性:
titleLabel.textAlignment Number [1]
就这么简单。希望它有所帮助...
答案 2 :(得分:73)
更新了近期iOS版本的答案
由于这是公认的答案,所以在这里添加了@Sean的答案:
在按钮的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中,将UIButton上的Line Break
设置为Word Wrap
。比你可以插入多行标题。只需按Option + Return
键即可创建新行。您还需要将其添加到Interface Builder中的用户定义的运行时属性:
titleLabel.textAlignment Number [1]
答案 3 :(得分:19)
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentCenter;
[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];
答案 4 :(得分:9)
为避免完全需要编辑代码,因此需要对视图进行子类化,在Xcode5及更高版本中,您可以遵循Borut Tomazin的建议:
在Interface Builder (或故事板)中设置换行符 自动换行。比你可以插入多行标题。刚打 选项 + 返回键以换行。
然后,在用户定义的运行时属性中,您可以添加
关键路径:titleLabel.textAlignment
输入:Number
价值:1
注意:这可能不是完全“未来证明”,因为我们正在将UITextAlignmentCenter
常量转换为其数值(并且该常量可能会随着新iOS版本的发布而改变),但它似乎是安全的在不久的将来。
答案 5 :(得分:0)