我想淡出视图并在最后显示一个webview,页面缩放以适合webview。但是,当我尝试通过完成块在动画结束时显示webview时,网页不会缩放以适应,而是缩放太多并且需要平移才能看到所有内容。 例如,如果我有:
- (void)viewDidLoad {
[super viewDidLoad];
webView = [[UIWebView alloc] init];
webView.scalesPageToFit = YES;
webView.backgroundColor = [UIColor blackColor];
self.view.alpha = 1;
self.view.backgroundColor = [UIColor whiteColor];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://stackoverflow.com"]]];
// self.view = webView;
[UIView animateWithDuration:2 delay:0.0
options:UIViewAnimationOptionBeginFromCurrentState
animations:^{ self.view.alpha = 0; }
completion:^(BOOL fin){ self.view = webView; }];
}
UIWebView中的内容无法正确缩放,但如果我放弃动画并只分配self.view = webView
,则页面呈现为scalesPageToFit = YES
时的预期。有谁知道发生了什么事?
答案 0 :(得分:2)
要回答我自己的问题,我认为这是因为webview在加载内容时没有任何明确的参考框架可以使用,因此当我突然将其视为控制器的视图时,它无法正确布局内容在动画之后。
作为修复,我所要做的只是在viewDidLoad中给它一个框架:webView.frame = self.view.frame;
我上面很幸运;由于在笔尖中指定了框架,因此在viewDidLoad:
之前已经为self.view设置了框架。如果我在loadView:
中动态生成视图而不在那里设置任何帧,我必须将该帧分配推迟到viewWillAppear:
。 (浪费了一点时间提醒自己这个艰难的方式!)