为什么UIWebView scalepagetofit在动画块中显示视图时不起作用?

时间:2011-12-13 09:44:07

标签: ios uiwebview

我想淡出视图并在最后显示一个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时的预期。有谁知道发生了什么事?

1 个答案:

答案 0 :(得分:2)

要回答我自己的问题,我认为这是因为webview在加载内容时没有任何明确的参考框架可以使用,因此当我突然将其视为控制器的视图时,它无法正确布局内容在动画之后。

作为修复,我所要做的只是在viewDidLoad中给它一个框架:webView.frame = self.view.frame;

我上面很幸运;由于在笔尖中指定了框架,因此在viewDidLoad:之前已经为self.view设置了框架。如果我在loadView:中动态生成视图而不在那里设置任何帧,我必须将该帧分配推迟到viewWillAppear:。 (浪费了一点时间提醒自己这个艰难的方式!)