如何使用Interface Builder在UIButton中逐行中心文本?我正在搜索选项,只是没有看到它。这是按钮:
您无法将文本设置为在笔尖中居中。但您可以更改代码中的对齐方式:
- (void)viewDidLoad {
[super viewDidLoad];
self.myButton.titleLabel.textAlignment = UITextAlignmentCenter;
}
我知道这是一个古老的问题,但我在自己的尝试中遇到了它,以便在IB中将UIButton的多行文本居中。我发现默认情况下,当“title”设置为“plain”并且“line break”设置为“自动换行”时,标题文本的最长行居中,其他行左对齐此行(类似于OP的屏幕截图)。
为了使所有线条都正确居中,需要将“标题”更改为“归属”。这提供了更多选项来自定义标题文本的外观。将每行文本居中(现在您可以实际更改每行的对齐方式)。另外一定要在文本上方的“more ...”下面设置“换行符”到“自动换行”。这个换行选项的行为似乎存在一个错误,至少在Xcode 4.5中是这样,因为IB中按钮上的文本看起来不正确,截断除第一行以外的所有内容。似乎“自动换行”和截断选项在IB中向后解释,但如果运行应用程序,它在模拟器中的行为正确。
实际上你可以在界面构建器中完成它。
只需将Title设置为“Attributed”,然后选择center alignment。
并非所有选项都是使用Interface Builder完成的,因此您必须通过编码来完成其中一些选项,通常我们在函数viewDidLoad
中执行它们。
要通过代码将文本置于按钮中心,可以使用以下内容:
button1.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
您可以使用相同的技术将文本与任何方向对齐,例如向左:
button1.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
但是这会使文本向左偏移太多而你可能希望在保持左对齐之前有一些空格,所以你在对齐代码之后添加一个插图如下:
button1.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
在这种情况下,我们将文本从Y轴推动10个点。我在这里说的不是像素,因为你知道Apple使用点技术来测量距离,以便能够在正常显示和视网膜显示之间轻松适应(视网膜是正常显示的2倍)。
对于IB,将Title设置为“Attributed”并选择中心对齐(如Alexander Danilov suggested)
但是如果你想在使用Swift 4的代码中做到这一点:
// center button text
yourButton.titleLabel?.textAlignment = .center
// enable multiline if needed
yourButton.titleLabel?.numberOfLines = 0
我还没有尝试过,但我认为一种方法可能是在你的按钮上创建一个CGRect,然后用它作为一个框架,创建一个标签,然后你可以玩标签,设置textAlignment属性为UITextAlignmentCenter,并将背景颜色设置为clear。
这适用于uitableview,但我不知道这是否适用于按钮。希望这可以帮助。