Zrobiłem dokładnie to samo. Oto jak zrobiłem to działa:
- Dodaj UIWebView jako podrzędny w UIScrollView (oczywiście ;-)
- wyłączyć rodzimy przewijanie UIWebView (można to zrobić przez iteracja subviews w UIWebView aż znajdziesz to UIScrollView i ustawić scrollEnabled = brak na nim.
- Ustawianie contentSize Twojego UIScrollView i ramka na UIWebView do rozmiaru zawartości UIWebViews HTML.
ostatni punkt jest nieco kłopotliwe, ponieważ nie można upewnij się, że HTML jest całkowicie ren dered, gdy webViewDidFinishLoad: zostaje wywołany na UIWebViewDelegate.
Oto niezawodny sposób, aby uzyskać zawartość HTML rozmiar:
1.Add funkcji javascript do HTML, który zostanie wywołany, kiedy dokument HTML jest gotowy:
window.onload = function() {
window.location.href = "ready://" + document.body.offsetHeight;
}
Funkcja ta wysyła żądanie ma wysokość treści w adresie URL.
2.In swojej UIWebViewDelegate przechwycić tę prośbę:
- (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;
}
nadzieję, że pomoże
UPDATE
Oto wersja 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
}
Może ktoś przetłumaczyć na szybki? –
@YestayMuratov Przepraszamy za spóźnioną odpowiedź. Dodałem wersję Swift 2 do mojej odpowiedzi – joern
@joern, która nie zadziała, jeśli treść HTML ma coś w stylu "Pokaż więcej" z dołączonym JS (aby rozwinąć lub załadować i rozwinąć artykuł), prawda? – OgreSwamp