在我的分段控件中,有时标题比适合其细分更宽。怎么能让它截断?
假设第1段的标题为Text overlaps
,第2段的名称为ok
。
我希望它看起来如何:
[Text ov...| ok ]
它看起来像什么:
T[ext overla|ps ok ]
我尝试了什么:
setWidth:forSegment
设置细分受众群的宽度。仍然重叠,而不是截断。UISegmentedControl
在设置细分的标题之前,我是否必须自行截断它?
答案 0 :(得分:1)
你必须自己截断它。
没有用于设置截断的公共API。即使您浏览UISegmentedControl
的私有视图层次结构,找到标签,并将lineBreakMode
设置为UILineBreakModeTailTruncation
,也不会截断标签。 (我试过了。)
编辑:我让这个工作了。它不漂亮,可能会在未来的iOS版本中停止工作,它可能会让你从App Store中被拒绝。
static void fixLineBreakMode(UIView *view)
{
if ([view respondsToSelector:@selector(setLineBreakMode:)]) {
[(id)view setLineBreakMode:UILineBreakModeTailTruncation];
[view setFrame:CGRectInset([view.superview bounds], 6, 0)];
} else {
for (UIView *subview in view.subviews)
fixLineBreakMode(subview);
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
fixLineBreakMode(self.segmentedControl);
}
答案 1 :(得分:0)
当我需要使用x个段填充分段控件时,我遇到了同样的挑战。有些头衔悬而未决。如果它们太长,我试图在中间截断标题。我做了类似的事情:
NSString *s = @"This title is too long to fit";
NSMutableString *mS = [[NSMutableString alloc] init];
int len = [s length];
if (len > 10) {
for (int i = 0; i < len; i++) {
unichar ch = [s characterAtIndex:i];
if(i > 3 && i < 6){
[mS appendString:@"."];
} else {
[mS appendString:[NSString stringWithFormat: @"%C", ch]];
}
}
}
这只是为了给你一些想法。您可以限制中间的点数,只需计算附加的点数,然后停止添加。它达到3.当你有截断的字符串时,你可以用它来设置一个段标题。头部,尾部截断的逻辑相同。