5

私はUIWebViewだけの単純なUIViewControllerを持っています。 UIWebViewは、URLのコンテンツを表示するために使用可能なすべての領域を取る必要があります。そのコンテナに基づいてUIViewControllerのプログラムによるサイズ変更

このViewControllerをさまざまな場所で再利用したいと思います。 NavigationControllerにプッシュされる場合もあれば、ModalViewControllerとして表示されるものもあります。場合によっては、TabBarControllerの内部にあることもあります。 UIWebViewのサイズは、場合によって異なります。

Interface Builderを使用せずにUIWebViewのフレームを設定する最も良い方法は何ですか?つまり、次のコードでwebViewFrameをどのように初期化する必要がありますか?それとも、私は行方不明ですか?

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UIWebView* webView = [[UIWebView alloc] initWithFrame:webViewFrame]; 
    webView.delegate = self; 
    NSURLRequest* request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 
    [webView loadRequest:request]; 
    [self.view addSubview:webView]; 
    [webView release]; 
} 

私は異なる可能性(self.view.frame、self.navigationController.view.frame、など)で試してみましたが、何もすべてのケースのために働くようです。

ありがとうございます!

答えて

8

NIBを使用していない場合、-loadViewメソッドはどのように見えますか?これは次のようになります。

- (void)loadView 
{ 
    UIWebView* webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
    webView.delegate = self; 
    self.view = webView 
    [webView release]; 
} 

この場合、最初のフレームは無関係です。 UIViewControllerは、ビューのサイズを正しく管理します。

しかし、実際にWebビュー(または他のビュー)を親ビューに挿入する場合は、autoresizeMaskを使用して、ビューの親とのサイズ変更の方法を制御します。例えば

:この場合

UIView* parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 200)]; 
    parentView.autoresizesSubviews = YES; 

    UIWebView* webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
    webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

    [parentView addSubview:webView]; 
    self.view = parentView; 
    [parentView release]; 

、WebViewのの最初のフレームはparentViewの境界に対するものです。

+0

迅速な返信ありがとう、ダレン。どちらのオプションも問題を解決します。 しかし、理解できないことがあります。自分のコード例でself.view.frameをwebViewFrameとして使用できないのはなぜですか? viewDidLoadでself.view.frameのサイズが適切であるべきですか? – hpique

+1

viewDidLoadの後にself.viewがサイズ変更されます。実際、それは、いくつかの理由(例えば、進行中のタイトルバー)のために、いつでもリサイズすることができる。したがって、サブビューのサイズが正しく変更されるように、常に自動サイズ変更マスクを設定する必要があります。 – Darren

+0

興味深い。だから実際にviewDidLoadのself.viewの実際のフレームを知る方法はないのですか? – hpique

関連する問題