2011-12-23 14 views
1

私のセグメント化されたコントロールでは、タイトルはセグメントに収まるよりも広い場合があります。どうすれば切り捨てることができますか?セグメント化されたコントロールのタイトルが合わない、オーバーラップ

セグメント1のタイトルがText overlapsでセグメント2の名前がokであるとします。私が試した何

T[ext overla|ps ok ] 

  • プログラムでsetWidth:forSegmentセグメントの幅を設定し、私はそれを見てみたいどのよう

    :それはどのようなものか

    [Text ov...| ok ] 
    

    。まだ重複していて、切り詰めていません。

  • UISegmentedControl

の性質を学ぶ私は、セグメントのタイトルを設定する前に、それを自分自身を切り捨てる必要がありますか?

答えて

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

+0

プライベートビュー階層にアクセスします。彼らがあなたを拒否するかどうかはわかりません。私は可能性を指摘しているだけです。 –

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に達する。切り詰められた文字列があるとき、それを使ってセグメントタイトルを設定することができる。頭、尾を切り捨てるのと同じ論理。

関連する問題