我有一个只有UIWebView的简单UIViewController。 UIWebView应该占用所有可用空间以显示url的内容。

我想在各个地方重用此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等),但似乎在所有情况下都无效。

最佳答案

如果您不使用NIB,那么-loadView方法是什么样的?它看起来应该像这样:

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

在这种情况下,初始帧是无关紧要的。 UIViewController将负责正确调整 View 的大小。

但是,如果您实际上想将Web View (或任何其他 View )插入到父 View 中,则可以使用autoresizeMask来控制如何使用其父 View 调整 View 的大小。

例如:
    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的边界的。

关于iphone - 以编程方式根据其容器调整UIViewController的大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1836554/

10-14 10:55