Программно изменить размер UIViewController на основе его контейнера - PullRequest
5 голосов
/ 03 декабря 2009

У меня есть простой UIViewController только с UIWebView. UIWebView должен занимать все доступное пространство для отображения содержимого URL.

Я хотел бы повторно использовать этот ViewController в различных местах. В некоторых случаях он будет помещен в NavigationController, в некоторых он будет показан как ModalViewController. Иногда это может быть внутри TabBarController. Размер UIWebView будет варьироваться от случая к случаю.

Как лучше всего установить фрейм UIWebView без использования Interface Builder? Другими словами, как мне инициализировать 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 и т. Д.), Но, похоже, ничего не работает для всех случаев.

1 Ответ

8 голосов
/ 03 декабря 2009

Если вы не используете NIB, то как выглядит ваш метод -loadView? Это должно выглядеть так:

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

В этом случае начальный кадр не имеет значения. UIViewController позаботится о правильном определении размера вашего вида.

Однако, если вы действительно хотите вставить веб-представление (или любое другое представление) в родительское представление, вы используете 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.

...