我有一个简单的UIViewController,只有一个UIWebView。 UIWebView应占用所有可用空间来显示网址的内容。
我想在各个地方重用这个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等),但似乎没有任何东西适用于所有情况。
答案 0 :(得分: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的边界。