2011-12-23 2 views
1

세그먼트 컨트롤에서 제목이 해당 세그먼트보다 넓을 때가 있습니다. 어떻게자를 수 있습니까?세그먼트 컨트롤의 제목이 맞지 않습니다. 겹치기

세그먼트 1의 제목이 Text overlaps이고 세그먼트 2의 제목이 ok이라고 가정 해 봅니다.

나는 그것을보고 싶지 방법 : I 시도 무엇

T[ext overla|ps ok ] 

:

[Text ov...| 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

    +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에 도달합니다. 잘린 문자열이 있으면이를 사용하여 세그먼트 제목을 설정할 수 있습니다. 머리, 꼬리 잘림을위한 동일한 논리.

    관련 문제