分段控制的标题不适合,重叠

时间:2011-12-23 18:06:24

标签: ios cocoa-touch uikit uisegmentedcontrol

在我的分段控件中,有时标题比适合其细分更宽。怎么能让它截断?

假设第1段的标题为Text overlaps,第2段的名称为ok

我希望它看起来如何:

  [Text ov...|   ok   ]

它看起来像什么:

 T[ext overla|ps  ok   ]

我尝试了什么:

在设置细分的标题之前,我是否必须自行截断它?

2 个答案:

答案 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.当你有截断的字符串时,你可以用它来设置一个段标题。头部,尾部截断的逻辑相同。