动态调整给定 UIButton 框架中 2 个字符串的长度
Dynamically adjust lengths of 2 strings in a given UIButton frame
有 2 个字符串由 space 分隔,形成一个 UIButton
标题。无法更改按钮框架。设备仅 iPhone 纵向。如何根据要求动态控制2个字符串的长度?
要求-
第二个字符串的最小长度为 9 个字符,将始终显示。
如果第一个字符串的长度大于 15 个字符,则可以从右侧截断它,以省略号 (...) 结尾
考虑到所有组合,我不想使用 if-else
对值进行硬编码。寻找一种设置比率或动态设置字符串的方法 - 以便至少满足最低显示要求。
// Min length to be displayed is flexible based on space occupied by second string
// Input length ranges from 9 to 20+ characters.
NSString *firstString = @"FirstPartOfTheStringIsDynamic";
// Min length to be displayed 9 characters.
// Input length ranges from 9 to 18 characters.
NSString *secondString = @"123456789-Second";
if (firstString.length > 15) {
firstString = [[firstString substringToIndex:15] stringByAppendingString:@"..."];
}
self.mainButton.titleLabel.adjustsFontSizeToFitWidth = NO;
NSString *buttonTitleString = [NSString stringWithFormat:@"%@ %@", firstString, secondString];
[self.mainButton setTitle:buttonTitleString forState:UIControlStateNormal];
尝试 |回购:https://github.com/rohanaurora/Fitting-Text
- 我尝试通过对值进行硬编码并赋予第二个字符串优先级来计算给定
UIButton
中可以容纳的字符数。这不是一个好习惯。
- 无法更改字体大小。因此,我尝试研究动态计算适合给定 space 的字符数的解决方案。
在下面的屏幕截图中,我想截断第一个字符串并为第二个字符串腾出空间以完全显示 -
我通过计算可以容纳第一个字符串的剩余大小解决了上述难题。使用 NSString
类别以省略号截断。
Size of First String = Size of Button - Size of Second String
// Min length to be displayed is flexible based on space occupied by second string
// Input length ranges from 9 to 20+ characters.
NSString *firstString = @"FirstPartOfTheStringIsDynamic";
// Min length to be displayed 9 characters.
NSString *secondString = @"123456789-Second";
CGSize sizeOfSecondString = [secondString sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:17.0f]}];
CGSize sizeOfButton = self.mainButton.frame.size;
// Calculate the remaining width to accomodate first string
CGFloat sizeOfFirstString = sizeOfButton.width - sizeOfSecondString.width;
firstString = [firstString stringByTruncatingToWidth:sizeOfFirstString withFont:[UIFont systemFontOfSize:17.0f]];
NSString *buttonTitleString = [NSString stringWithFormat:@"%@ %@", firstString, secondString];
self.mainButton.titleLabel.adjustsFontSizeToFitWidth = NO;
[self.mainButton setTitle:buttonTitleString forState:UIControlStateNormal];
这是更新后的演示 - https://github.com/rohanaurora/Fitting-Text
有 2 个字符串由 space 分隔,形成一个 UIButton
标题。无法更改按钮框架。设备仅 iPhone 纵向。如何根据要求动态控制2个字符串的长度?
要求-
第二个字符串的最小长度为 9 个字符,将始终显示。 如果第一个字符串的长度大于 15 个字符,则可以从右侧截断它,以省略号 (...) 结尾
考虑到所有组合,我不想使用 if-else
对值进行硬编码。寻找一种设置比率或动态设置字符串的方法 - 以便至少满足最低显示要求。
// Min length to be displayed is flexible based on space occupied by second string
// Input length ranges from 9 to 20+ characters.
NSString *firstString = @"FirstPartOfTheStringIsDynamic";
// Min length to be displayed 9 characters.
// Input length ranges from 9 to 18 characters.
NSString *secondString = @"123456789-Second";
if (firstString.length > 15) {
firstString = [[firstString substringToIndex:15] stringByAppendingString:@"..."];
}
self.mainButton.titleLabel.adjustsFontSizeToFitWidth = NO;
NSString *buttonTitleString = [NSString stringWithFormat:@"%@ %@", firstString, secondString];
[self.mainButton setTitle:buttonTitleString forState:UIControlStateNormal];
尝试 |回购:https://github.com/rohanaurora/Fitting-Text
- 我尝试通过对值进行硬编码并赋予第二个字符串优先级来计算给定
UIButton
中可以容纳的字符数。这不是一个好习惯。 - 无法更改字体大小。因此,我尝试研究动态计算适合给定 space 的字符数的解决方案。
在下面的屏幕截图中,我想截断第一个字符串并为第二个字符串腾出空间以完全显示 -
我通过计算可以容纳第一个字符串的剩余大小解决了上述难题。使用 NSString
类别以省略号截断。
Size of First String = Size of Button - Size of Second String
// Min length to be displayed is flexible based on space occupied by second string
// Input length ranges from 9 to 20+ characters.
NSString *firstString = @"FirstPartOfTheStringIsDynamic";
// Min length to be displayed 9 characters.
NSString *secondString = @"123456789-Second";
CGSize sizeOfSecondString = [secondString sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:17.0f]}];
CGSize sizeOfButton = self.mainButton.frame.size;
// Calculate the remaining width to accomodate first string
CGFloat sizeOfFirstString = sizeOfButton.width - sizeOfSecondString.width;
firstString = [firstString stringByTruncatingToWidth:sizeOfFirstString withFont:[UIFont systemFontOfSize:17.0f]];
NSString *buttonTitleString = [NSString stringWithFormat:@"%@ %@", firstString, secondString];
self.mainButton.titleLabel.adjustsFontSizeToFitWidth = NO;
[self.mainButton setTitle:buttonTitleString forState:UIControlStateNormal];
这是更新后的演示 - https://github.com/rohanaurora/Fitting-Text