ios - 对于长度超过其宽度的单词,将 UIButton 的标题垂直居中

标签 ios objective-c uibutton vertical-alignment

我想实现一个 UIButton,这样无论文本的长度如何,标题都居中显示。

我面临的问题是按钮的宽度字体大小需要固定值,因为它们需要与其余部分保持一致用户界面细节。 我也无法截断文本

我可以分割单词,但只有当单词不适合标题的宽度时。

目前它对 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 垂直居中有什么想法/建议吗?

最佳答案

您可以用字符包裹标题,设置按钮的 line break modeNSLineBreakByCharWrapping(默认情况下它在单词边界处换行),仅当它包含不适合的单词时。

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 :-)
        }
    }

}

关于ios - 对于长度超过其宽度的单词,将 UIButton 的标题垂直居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29614597/

相关文章:

ios - 使用旧版本的 React Native 的新 React Native 项目

ios - Swift - 游戏中心不可用

ios - 在 iOS 中开发和分发框架

ios - 按比例调整 UIStackView 中的按钮大小

c++ - 带回调的 ObjC/C/C++ 高分辨率计时器

ios - UIButton 的两种方法?

ios - Swift:如何根据按钮点击将结果显示到标签

iphone - 单击按钮时 iOS 应用程序崩溃 iPhone

ios - 错误: unexpectedly found nil while unwrapping an Optional value. 如何解决?

ios - 如何使用 ARC 制作 UIBlockButton 套装?