2012-07-15 4 views
3

프로그래밍 방식으로 여러 줄로 된 UILabel을 만들고 UIView에 추가 한 다음 UIView를 뷰 컨트롤러에 추가하여 방향이 바뀌면 제대로 크기가 조정되는 가장 좋은 방법은 무엇입니까?프로그래밍 방식으로 만든 UILabel이 회전 할 때 크기 조정되지 않음

이전에도 비슷한 질문을 여러 번 시도했지만 특정 상황에 대한 해결책을 찾지 못했습니다. 나는 다중 회선 UILabel을 추가하려고하고있다. 필자가 작성한 코드는 레이블을 추가하지만 가로 모드에서는 항상보기의 너비입니다. UILabel이 너무 넓은 경우를 제외하고 iPad를 회전 시키면 예상대로 전체 앱이 회전합니다. 그 답은 .autoresizingMask 또는 .sizeToFit 또는 .autoresizesSubviews 속성에있는 것이 확실하지만 지금까지는 그렇지 않습니다. 여기에 내가, 내가이 .autoresizeMask 뭔가를보고 싶어하지만 지금은 며칠이에 벽에 내 머리를 때리고 있었어요 확신 말했듯이 시점

UIViewController *vc = [[UIViewController alloc] init]; 
    vc.title = @"Welcome"; 

    // tbc is an instance of the tab bar controller that this view will go into 
    UILabel *copy = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, tbc.view.frame.size.width, MAXFLOAT)]; 
    NSString *copyText = @"Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Cras mattis consectetur purus sit amet fermentum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Cras mattis consectetur purus sit amet fermentum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi leo risus, porta ac consectetur ac, vestibulum at eros."; 
    UIFont *copyFont = [UIFont fontWithName:@"HoeflerText-Regular" size:20.0f]; 
    [copy setContentMode:UIViewContentModeScaleAspectFit]; 
    [copy setText:copyText]; 
    [copy setFont:copyFont]; 
    [copy setNumberOfLines:0]; 
    [copy setLineBreakMode:UILineBreakModeWordWrap]; 
    [copy setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleRightMargin]; 

    CGRect frame = copy.frame; 
    frame.origin.x = 50; 
    frame.origin.y = 100; 
    frame.size.width = tbc.view.frame.size.width; 
    frame.size.height = tbc.view.frame.size.height - 100; 
    [copy setFrame:frame]; 
    [copy sizeToFit]; 

    UIView *content = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tbc.view.frame.size.width, vc.view.frame.size.height)]; 
    [content setAutoresizesSubviews:YES]; 
    [content addSubview:copy]; 
    [content sizeToFit]; 

    [vc.view setAutoresizesSubviews:YES]; 
    [vc.view setContentMode:UIViewContentModeScaleAspectFit]; 
    [vc.view addSubview:content]; 

내 코드는 그래서 나는 모든 것을 시도한 것처럼 느낍니다. 모든 제안을 부탁드립니다.

+0

좋은 그레이비, 프레임에 'MAXFLOAT'을 사용 했습니까? – CodaFi

+1

너무 커? ;) –

+0

아니요, 절대적으로 너무 작습니다. 분명히 iOS 기기는 (float) 3.40282346638528860e + 38 픽셀입니다. – CodaFi

답변

3

그냥 추가 : 당신이 말하는 때

[content setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleRightMargin]; 

:

setContentMode:, 당신은 얼마나 경계 변화는, 그러나, 경계가 변경되지 않은 경우 파단의 크기를 조정하려면보기를 말하고있다! ! (자동 마스크 마스크 플래그가 누락되어 있기 때문에)

vc가 NIB에서로드 된 viewController 인 경우 NIB 파일에서 뷰의 자동 크기 조정 옵션을 다시 확인하십시오. 그렇지 않으면 자동 크기 조정 마스크 플래그를 추가하십시오.

+1

또한 줄 수를 0으로 설정하십시오. –

+1

그게 내가 놓친거야. 실제로'UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin' 플래그를 제거해야했지만 부모 뷰에'autoresizingMask'를 설정하는 것이 주요한 문제였습니다. 감사! –

관련 문제