如何使用 Interface Builder 在 UIButton 中逐行居中文本?我正在搜索选项,只是没有看到它。这是按钮:
7 回答
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;
}
我知道这是一个老问题,但我在尝试将 IB 中 UIButton 的多行文本居中时遇到了这个问题。我发现默认情况下,当“title”设置为“plain”并且“line break”设置为“word wrap”时,标题文本的最长行居中,其他行与该行对齐(类似于 OP 的屏幕截图)。
为了使所有行正确居中,需要将“title”更改为“attributed”。这提供了更多选项来自定义标题文本的外观。将每行文本居中(您现在实际上可以单独更改每行的对齐方式)。还要确保在文本上方的“更多...”下将“换行”设置为“自动换行”。这个换行选项的行为似乎存在一个错误,至少目前在 Xcode 4.5 中,因为 IB 中按钮上的文本看起来不正确,截断除第一行之外的所有内容。似乎“自动换行”和截断选项在 IB 中被向后解释,但如果您运行该应用程序,它在模拟器中的行为正确。
实际上你可以在界面生成器中做到这一点。
只需将 Title 设置为“Attributed”,然后选择居中对齐。
@from 评论:要换行,您需要将换行符设置为字符换行或自动换行。
PS:这可能不会在 xcode 中呈现。但是,它将在运行时工作。
您可以通过情节提要在 UIButton 中设置中心多行文本。
这就是使文本有两行或多行的方法。
将以下关键路径设置为
Identity Inspector --> 用户定义的运行时属性 --> 添加新的键值对,如下
titleLabel.textAlignment - NSNumber - 1
和
titleLabel.numberOfLines - NSNumber - 5 - or use "0" meaning "any number"
它看起来像这样:
请注意,(2016 年)不幸的是,它实际上并没有在 Storyboard 中显示两行或多行文本(您只看到第一行),但是当您在模拟器或设备中运行时它可以完美运行。
对于IB,将 Title 设置为“Attributed”并选择居中对齐(如Alexander Danilov 建议的)
但是,如果您想使用Swift 4在代码中执行此操作:
// center button text
yourButton.titleLabel?.textAlignment = .center
// enable multiline if needed
yourButton.titleLabel?.numberOfLines = 0
并非所有选项都使用 Interface Builder 完成,因此您必须通过编码完成其中一些选项,通常我们在 function 中完成它们viewDidLoad
。
要通过代码将文本居中在按钮内,您可以使用以下命令:
button1.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
您可以使用相同的技术将文本与任何方向对齐,例如向左对齐:
button1.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
但这会使文本向左太多,您可能希望在它保持向左对齐之前留出一些空间,因此您在对齐代码之后添加一个插入,如下所示:
button1.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
在这种情况下,我们将文本从 Y 轴推了 10 个点。我在这里说点不是像素,因为如您所知,Apple 使用点技术来测量距离,以便能够在正常显示和视网膜显示(其中视网膜是正常显示的 2 倍)之间轻松适应。
我还没有尝试过,但我认为一种方法可能是在您的按钮顶部创建一个 CGRect,然后将其用作框架,创建一个标签,然后您可以使用标签,设置textAlignment 属性为 UITextAlignmentCenter,并将背景颜色设置为清晰。
这适用于uitableview,但我不知道这是否适用于按钮。希望这可以帮助。