UIButton标签文本autoshrink with insets

时间:2014-12-16 16:59:50

标签: ios objective-c fonts uibutton resize

我正在使用自动布局。我有一个固定高度和宽度的UIButton和一个背景图像(圆角正方形)。它显示可变长度的文本字符串(介于1到30个单词之间,让我们说)。

我想根据字符串长度使文本自动收缩,并在我的按钮中最多包含3行文本。所以我这样做了:

 [button.titleLabel setMinimumScaleFactor:0.01];
    [button.titleLabel setAdjustsFontSizeToFitWidth: YES];
    [button.titleLabel setNumberOfLines:3];
    [button.titleLabel setTextAlignment:NSTextAlignmentCenter];

我还在Interface Builder中将字体大小设置为50之类的高值。我将换行设置为" Clip"。

按钮的文字正确地适应了字符数,但它往往超出了按钮的框架。它适用于中等长度的字符串但不适用于大字符串,我不知道为什么。我试图在我的按钮上添加插图,但它没有做太多,只是移动过大的文本,所以我假设字体调整是在插入插入之前计算的。

截图下方。这些按钮中有4个,包含在较大的蓝色视图中。红色背景是按钮的背景,黄色是用作背景的图像。

Screenshot

I uploaded an example project on Google Drive. Use iPhone 6 Plus for simulation.

1 个答案:

答案 0 :(得分:4)

您还应该设置按钮的titleEdgeInsets属性。

例如:

button.titleEdgeInsets = UIEdgeInsetsMake(2.0, 2.0, 2.0, 2.0);

在你的项目中,似乎有些布局限制会弄乱按钮'标题标签。

添加以下约束时,它可以正常工作。

UILabel *titleLabel = button.titleLabel;
NSDictionary *views = NSDictionaryOfVariableBindings(titleLabel);
[button addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[titleLabel]|"
                                                               options:kNilOptions
                                                               metrics:nil
                                                                 views:views]];

在使用此解决方案之前,我建议您首先尝试以更简单的方式设置布局约束。