2011-12-23 34 views
1

以我分段控制,有時標題寬於它的配合段。我怎樣才能使它截斷?標題分段控制的不適合,重疊

比方說,1段的標題是Text overlaps和段2被命名爲ok

我多麼希望它看起來:

[Text ov...| ok ] 

是什麼樣子:

T[ext overla|ps ok ] 

我試了一下:

屬性我必須截斷它自己,使該分段標題前?

回答

1

你必須自己截斷它。

有一個設置截斷沒有公開的API。即使你挖通了UISegmentedControl的私人視圖層次,找到標籤,並設置lineBreakModeUILineBreakModeTailTruncation,它不會截斷標籤爲您服務。 (我試過了。)

編輯:我得到這個工作。這並不美妙,它可能會在未來的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); 
} 
+0

這是什麼原因導致應用程序被拒絕? – JOG 2011-12-23 19:07:29

+0

您將訪問私人視圖層次結構。我不知道他們是否會拒絕你。我只是指出了可能性。 – 2011-12-23 19:09:32

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.如果您有截斷的字符串,您可以使用它來設置段標題。頭部,尾部截斷的邏輯相同。