我正在使用自动布局。我有一个固定高度和宽度的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个,包含在较大的蓝色视图中。红色背景是按钮的背景,黄色是用作背景的图像。
I uploaded an example project on Google Drive. Use iPhone 6 Plus for simulation.
答案 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]];
在使用此解决方案之前,我建议您首先尝试以更简单的方式设置布局约束。