iOS UIWebView wewnÄ…trz UIScrollView
Chcę mieć UIWebView
wewnÄ…trz UIScrollView
. UIWebView czasami wyjdzie poza granice ekranu iPhone ' a, więc potrzebuję sposobu na przewinięcie widoku, aby zobaczyć całą zawartość (ale nie chcę korzystać z wbudowanego przewijania UIWebView). Myślę więc o umieszczeniu całej zawartości wewnątrz UIScrollView, a następnie uczynieniu wysokości UIScrollView równą wysokości UIWebView i innych widoków, które są w nim.
Oto obrazek, który pomoże opisać mój problem:
1 answers
Zrobiłem dokładnie to samo. Oto jak to działa:
- Dodaj UIWebView jako subview UIScrollView (oczywiście ;-)
- Wyłącz natywne przewijanie UIWebView (możesz to zrobić poprzez iterację w podglądzie UIWebView, aż znajdziesz UIScrollView i ustaw scrollenabled = NO na nim.
- Ustaw rozmiar zawartości UIScrollView i ramki UIWebView na rozmiar zawartości HTML UIWebView.
Ostatni punkt to bit trudne, ponieważ nie możesz być pewien, że HTML jest całkowicie renderowany, gdy webViewDidFinishLoad: zostanie wywołany na UIWebViewDelegate.
Oto niezawodny sposób na uzyskanie rozmiaru zawartości HTML:
1.Dodaj funkcję javascript do HTML, która zostanie wywołana, gdy dokument HTML jest gotowy:
window.onload = function() {
window.location.href = "ready://" + document.body.offsetHeight;
}
Ta funkcja wysyła żądanie, które ma wysokość zawartości w adresie URL.
2.In Twój UIWebViewDelegate przechwycić to żądanie:
- (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;
}
Mam nadzieję, że pomaga
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
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-13 08:50:58