38

如何使用 Interface Builder 在 UIButton 中逐行居中文本?我正在搜索选项,只是没有看到它。这是按钮:

文本未居中的按钮

4

7 回答 7

61

You can't set the text to be centered in your nib. But you can change the alignment in your code:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.myButton.titleLabel.textAlignment = UITextAlignmentCenter;
}
于 2012-01-27T15:46:49.947 回答
14

我知道这是一个老问题,但我在尝试将 IB 中 UIButton 的多行文本居中时遇到了这个问题。我发现默认情况下,当“title”设置为“plain”并且“line break”设置为“word wrap”时,标题文本的最长行居中,其他行与该行对齐(类似于 OP 的屏幕截图)。

为了使所有行正确居中,需要将“title”更改为“attributed”。这提供了更多选项来自定义标题文本的外观。将每行文本居中(您现在实际上可以单独更改每行的对齐方式)。还要确保在文本上方的“更多...”下将“换行”设置为“自动换行”。这个换行选项的行为似乎存在一个错误,至少目前在 Xcode 4.5 中,因为 IB 中按钮上的文本看起来不正确,截断除第一行之外的所有内容。似乎“自动换行”和截断选项在 IB 中被向后解释,但如果您运行该应用程序,它在模拟器中的行为正确。

于 2012-09-27T10:26:27.573 回答
11

实际上你可以在界面生成器中做到这一点。

只需将 Title 设置为“Attributed”,然后选择居中对齐。

@from 评论:要换行,您需要将换行符设置为字符换行或自动换行。

PS:这可能不会在 xcode 中呈现。但是,它将在运行时工作。

于 2014-12-23T02:47:16.900 回答
8

您可以通过情节提要在 UIButton 中设置中心多行文本。

这就是使文本有两行或多行的方法。

将以下关键路径设置为

Identity Inspector --> 用户定义的运行时属性 --> 添加新的键值对,如下

titleLabel.textAlignment - NSNumber - 1

 titleLabel.numberOfLines - NSNumber - 5 - or use "0" meaning "any number"

它看起来像这样:

在此处输入图像描述

请注意,(2016 年)不幸的是,它实际上并没有在 Storyboard 中显示两行或多行文本(您只看到第一行),但是当您在模拟器或设备中运行时它可以完美运行。

于 2014-11-18T11:13:19.867 回答
3

对于IB,将 Title 设置为“Attributed”并选择居中对齐(如Alexander Danilov 建议的)

但是,如果您想使用Swift 4在代码中执行此操作:

// center button text
yourButton.titleLabel?.textAlignment = .center 

// enable multiline if needed
yourButton.titleLabel?.numberOfLines = 0 
于 2017-12-19T23:54:45.997 回答
2

并非所有选项都使用 Interface Builder 完成,因此您必须通过编码完成其中一些选项,通常我们在 function 中完成它们viewDidLoad

要通过代码将文本居中在按钮内,您可以使用以下命令:

button1.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

您可以使用相同的技术将文本与任何方向对齐,例如向左对齐:

button1.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

但这会使文本向左太多,您可能希望在它保持向左对齐之前留出一些空间,因此您在对齐代码之后添加一个插入,如下所示:

button1.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);

在这种情况下,我们将文本从 Y 轴推了 10 个点。我在这里说点不是像素,因为如您所知,Apple 使用点技术来测量距离,以便能够在正常显示和视网膜显示(其中视网膜是正常显示的 2 倍)之间轻松适应。

于 2012-01-27T16:03:33.930 回答
-3

我还没有尝试过,但我认为一种方法可能是在您的按钮顶部创建一个 CGRect,然后将其用作框架,创建一个标签,然后您可以使用标签,设置textAlignment 属性为 UITextAlignmentCenter,并将背景颜色设置为清晰。

这适用于uitableview,但我不知道这是否适用于按钮。希望这可以帮助。

于 2012-01-27T21:05:55.703 回答