我有以下代码......
UILabel *buttonLabel = [[UILabel alloc] initWithFrame:targetButton.bounds]; buttonLabel.text = @"Long text string"; [targetButton addSubview:buttonLabel]; [targetButton bringSubviewToFront:buttonLabel];
...我的想法是我可以为按钮添加多行文本,但文本总是被UIButton的backgroundImage遮盖.用于显示按钮子视图的日志记录调用显示已添加UILabel,但无法看到文本本身.这是UIButton中的错误还是我做错了什么?
对于iOS 6及更高版本,请使用以下内容以允许多行:
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; // you probably want to center it button.titleLabel.textAlignment = NSTextAlignmentCenter; // if you want to [button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];
对于iOS 5及更低版本,请使用以下内容以允许多行:
button.titleLabel.lineBreakMode = UILineBreakModeWordWrap; // you probably want to center it button.titleLabel.textAlignment = UITextAlignmentCenter; [button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];
2017年,iOS9前锋,
通常,只做这两件事:
选择"归属文本"
在"Line Break"弹出窗口中选择"Word Wrap"
所选答案是正确的但如果您更喜欢在Interface Builder中执行此类操作,则可以执行以下操作:
如果要添加标题以多行为中心的按钮,请为按钮设置Interface Builder的设置:
[]
对于IOS 6:
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.textAlignment = NSTextAlignmentCenter;
如
UILineBreakModeWordWrap and UITextAlignmentCenter
在IOS 6开始时已弃用..
重申Roger Nolan的建议,但使用明确的代码,这是一般解决方案:
button.titleLabel?.numberOfLines = 0
button.titleLabel?.lineBreakMode = .byWordWrapping button.titleLabel?.textAlignment = .center button.setTitle("Button\nTitle",for: .normal)
有一个更简单的方法:
someButton.lineBreakMode = UILineBreakModeWordWrap;
(针对iOS 3及更高版本编辑:)
someButton.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
使用autolayout在iOS7上左对齐:
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.textAlignment = NSTextAlignmentLeft; button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
在Xcode 9.3中,你可以使用如下的故事板,
您需要将按钮标题textAlignment设置为居中
button.titleLabel?.textAlignment = .center
您不需要使用新行(\n)设置标题文本,如下所示,
button.setTitle("Good\nAnswer",for: .normal)
只需设置标题,
button.setTitle("Good Answer",for: .normal)
这是结果,
首先,你应该知道UIButton里面已经有了UILabel.您可以使用它进行设置–setTitle:forState:
.
您的示例的问题是您需要将UILabel的numberOfLines
属性设置为默认值1以外的值.您还应该查看lineBreakMode
属性.