将UIButton标题垂直居中,以获得长于其宽度的单词

时间:2015-04-13 20:36:22

标签: ios objective-c uibutton vertical-alignment

我想实现UIButton,因此无论文本的长度如何,标题都会显示在内部。

我面临的问题是按钮的宽度字体大小必须是固定值,因为它们需要是与其他UI细节一致。并且我也无法截断文字

我很好用分词,但只有在不适合标题的宽度时。

目前它适用于1行和2行文本(带空格),但当标题包含一个没有空格的长字时,它仅将第一行居中(请看附图所示。)

enter image description here enter image description here

我想我想做点什么:

if (button.currentTitle.length > (buttonWidth/characterWidth)) { //2-line title buttons
    // Do something special to fix the problem
}

但是我已经尝试过设置所有这些并且不使用它们了:

[button.titleLabel setTextAlignment:NSTextAlignmentCenter];
[button.titleLabel setBaselineAdjustment:UIBaselineAdjustmentAlignCenters];
[button setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 20, 0)];
button.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;

保持titleLabel垂直居中的任何想法/建议?

1 个答案:

答案 0 :(得分:1)

你可以用字符包裹标题,将按钮的line break mode设置为NSLineBreakByCharWrapping(默认情况下它包含在字边界处),只有当它包含不适合的单词时。

if (button.currentTitle.length > (buttonWidth/characterWidth)) { //2-line title buttons

    // Check if title contains long words
    NSArray *words = [button.currentTitle componentsSeparatedByString:@" "];
    for (NSString *word in words) {
        if (word.length > (buttonWidth/characterWidth)) {
            // Set the line break mode to char wrapping
            button.titleLabel.lineBreakMode = NSLineBreakByCharWrapping;
            break; // No need to continue :-)
        }
    }

}