3

プログラムで複数行の UILabel を作成し、それを UIView に追加し、その UIView をビュー コントローラーに追加して、向きが変わったときに適切にサイズ変更されるようにする最善の方法は何ですか?

以前にも同様の質問が何度も寄せられているようですが、特定の状況に対する解決策が見つかりません。複数行の UILabel を追加しようとしているビューがあります。私が思いついたコードはラベルを追加しますが、それは常に横向きモードのビューの幅です。UILabel が広すぎることを除いて、iPad を回転させると、アプリ全体が期待どおりに回転します。答えは、.autoresizingMaskまたは.sizeToFitまたは.autoresizesSubviewsプロパティの組み合わせにあると確信していますが、今のところ得られていません。ここまでの私のコードは次のとおりです

    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];

私が言ったように、私は何かが欠けていると確信して.autoresizeMaskいますが、私はこれで数日間壁に頭をぶつけていたので、すべてを試したような気がします. 任意の提案をいただければ幸いです。

4

1 に答える 1

3

追加するだけです:

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

あなたが言っているとき:

setContentMode:、境界が変更された場合にサブビューのサイズを変更する方法をビューに伝えているだけですが、境界は変更されていません!! (自動サイズ変更マスク フラグがないため)

vc が NIB からロードされた viewController である場合は、NIB ファイルからビューの自動サイズ変更オプションを再確認してください。そうでない場合は、自動サイズ変更マスク フラグも追加してください。

于 2012-07-15T13:37:57.157 に答える