UIButton标签文本autoshrink with insets

Kon*_*rad 5 fonts resize objective-c uibutton ios

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

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

 [button.titleLabel setMinimumScaleFactor:0.01];
    [button.titleLabel setAdjustsFontSizeToFitWidth: YES];
    [button.titleLabel setNumberOfLines:3];
    [button.titleLabel setTextAlignment:NSTextAlignmentCenter];
Run Code Online (Sandbox Code Playgroud)

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

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

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

截图

我在Google云端硬盘上传了一个示例项目.使用iPhone 6 Plus进行模拟.

Mox*_*oxy 5

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

例如:

button.titleEdgeInsets = UIEdgeInsetsMake(2.0, 2.0, 2.0, 2.0);
Run Code Online (Sandbox Code Playgroud)

在您的项目中,似乎有一些布局限制与按钮的标题标签混淆。

当添加以下约束时,它会起作用。

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

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