我希望允许用户将缩放因子与文档相关联,并在 UIWebView 中显示该文档时将其用作起点。然而,这似乎webViewDidFinishLoad:
只表示内存加载的结束,不包括渲染或布局。这是演示该问题的示例代码:
- (void)viewDidLoad {
[super viewDidLoad];
UIWebView *webView = (UIWebView *)self.view;
webView.delegate = self;
webView.scalesPageToFit = YES;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSString *urlString = [[NSBundle mainBundle] pathForResource:@"Doc" ofType:@"pdf"];
NSURL *file = [NSURL fileURLWithPath:urlString];
[(UIWebView *)self.view loadRequest:[NSURLRequest requestWithURL:file]];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
if (!webView.isLoading) {
[webView.scrollView setZoomScale:1.5 animated:YES];
}
}
对 setZoomScale: 的调用没有任何效果(即文件以 1.0 的缩放系数显示),显然是因为它发生在滚动视图处于可以处理它的某种状态之前。如果我将上面的最终方法更改为下面的方法,一切都会如我所愿。
- (void)delayedZoomMethod {
[((UIWebView *)self.view).scrollView setZoomScale:1.5 animated:YES];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[self performSelector:@selector(delayedZoomMethod) withObject:nil afterDelay:1.0];
}
当然,这是一个坏主意,因为 1.0 延迟是任意的,对于绝大多数情况来说可能太长,并且在某些未知的条件下可能太短。
文档说:“如果您的应用程序想要自定义 Web 视图的滚动行为,它可以访问滚动视图。 ”有谁知道我可以观察到的通知或 Web 视图或其滚动视图中的属性当那个陈述成为真的时被告知?