对于长度超过其宽度的单词,将 UIButton 的标题垂直居中
Center a UIButton's title vertically for words longer than its width
我想实现 UIButton
无论文本长度如何,标题都居中显示。
我面临的问题是按钮的宽度和字体大小需要固定值,因为它们需要与其余 UI 细节保持一致。 我也无法截断文本。
我可以分割单词,但仅当单词不适合标题的宽度时。
目前它对 1 行和 2 行文本(带空格)工作正常,但当标题包含一个没有空格的长单词时,它仅在第一行居中(请参阅所附图片)。
我想我想做这样的事情:
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;
任何 ideas/suggestions 保持 titleLabel
垂直居中?
您可以按字符换行标题,将按钮的 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 :-)
}
}
}
我想实现 UIButton
无论文本长度如何,标题都居中显示。
我面临的问题是按钮的宽度和字体大小需要固定值,因为它们需要与其余 UI 细节保持一致。 我也无法截断文本。
我可以分割单词,但仅当单词不适合标题的宽度时。
目前它对 1 行和 2 行文本(带空格)工作正常,但当标题包含一个没有空格的长单词时,它仅在第一行居中(请参阅所附图片)。
我想我想做这样的事情:
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;
任何 ideas/suggestions 保持 titleLabel
垂直居中?
您可以按字符换行标题,将按钮的 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 :-)
}
}
}