Ответ 1
Я сделал то же самое. Вот как я это сделал:
- Добавить UIWebView в качестве подзадачи UIScrollView (очевидно, -)
- Отключить собственную прокрутку UIWebView (вы можете сделать это, итерации через subviews UIWebView, пока не найдете его UIScrollView и установите для него scrollEnabled = НЕТ.
- Установите размер содержимого вашего UIScrollView и фрейма UIWebView в размере содержимого HTML UIWebViews.
Последняя точка немного сложна, потому что вы не можете быть уверены, что HTML полностью отображается, когда webViewDidFinishLoad: вызывается в UIWebViewDelegate.
Здесь надежный способ получить размер содержимого HTML:
1. Добавить функцию javascript в HTML, который вызывается, когда HTML-документ готов:
window.onload = function() {
window.location.href = "ready://" + document.body.offsetHeight;
}
Эти функции отправляют запрос с высотой содержимого в URL-адресе.
2. В UIWebViewDelegate вы перехватите этот запрос:
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *url = [request URL];
if (navigationType == UIWebViewNavigationTypeOther) {
if ([[url scheme] isEqualToString:@"ready"]) {
float contentHeight = [[url host] floatValue];
yourScrollView.contentSize = CGSizeMake(yourScrollView.frame.size.width, contentHeight + yourWebView.frame.origin.y);
CGRect fr = yourWebView.frame;
fr.size = CGSizeMake(yourWebView.frame.size.width, contentHeight);
yourWebView.frame = fr;
return NO;
}
return YES;
}
Надеюсь, что поможет
UPDATE
Вот версия Swift 2:
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
guard navigationType == .Other else { return true }
if let url = request.URL, let host = url.host {
guard url.scheme == "ready" else { return true }
if let contentHeight = Float(host) {
yourScrollView.contentSize = CGSizeMake(yourScrollView.bounds.size.width, CGFloat(contentHeight))
var fr = webView.frame
fr.size = CGSizeMake(fr.size.width, CGFloat(contentHeight))
webView.frame = fr
}
return false
}
return true
}