2016-12-09 13 views
9

Mam widok internetowy, który wyświetla tabelę znacznie większą niż ekran. Kiedy próbuję przewijać je po przekątnej PO zbliżeniu - zarówno w środku, jak i na zewnątrz, zwykle przewija tylko w jednym kierunku zamiast po przekątnej. Czy to zachowanie wynika z przewijania widoku strony internetowej, czy też mogłem popełnić błąd w moich kodach?Ukośne przesunięcie w widoku sieci Web wypełnione błędem skryptu html po powiększeniu

ten sposób I wypełnić mój pogląd na stronie internetowej:

webViewContent.scrollView.bounces = false 
    webViewContent.scrollView.bouncesZoom = false 
    webViewContent.scrollView.delegate = self 
    webViewContent.scalesPageToFit = true 

    var htmlString = "<html><head>... ... a really long string that creates a table" 
    webViewContent.loadHTMLString(htmlString, baseURL: nil) 

Proszę mów mi, jeśli htmlString może wpłynąć, nie obejmują go, ponieważ jest naprawdę długa.

Próbowałem również zsynchronizować widok z wierszem nagłówka o nazwie webViewTitle, który zapełniam używając podobnych kodów, ale tylko jeden wiersz. Kody synchronizacji wyglądają następująco:

func scrollViewDidZoom(_ scrollView: UIScrollView) { 
    if(scrollView != webViewTitle.scrollView){ 
     var zoomPadding:CGFloat = 0.0 
     if((currentZoomScale*webViewContent.scrollView.zoomScale) < 1){ 
      zoomPadding = 0.5*(-acos(currentZoomScale*webViewContent.scrollView.zoomScale)*180.0/CGFloat.pi) 
     }else{ 
      zoomPadding = 0.5*acos(2-(currentZoomScale*webViewContent.scrollView.zoomScale))*180.0/CGFloat.pi 
     } 
     webViewTitle.scrollView.zoom(to: CGRect(x: webViewContent.scrollView.contentOffset.x, 
               y: (355*currentZoomScale*webViewContent.scrollView.zoomScale) + zoomPadding, 
               width: webViewTitle.scrollView.bounds.width/currentZoomScale/webViewContent.scrollView.zoomScale, 
               height: webViewTitle.scrollView.bounds.height/currentZoomScale/webViewContent.scrollView.zoomScale), 
            animated: false) 
    } 
} 
func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    var zoomPadding:CGFloat = 0.0 
    if((currentZoomScale*webViewContent.scrollView.zoomScale) < 1){ 
     zoomPadding = 0.5*(-acos(currentZoomScale*webViewContent.scrollView.zoomScale)*180.0/CGFloat.pi) 
    }else{ 
     zoomPadding = 0.5*acos(2-(currentZoomScale*webViewContent.scrollView.zoomScale))*180.0/CGFloat.pi 
    } 
    if(scrollView == webViewTitle.scrollView){ 
     webViewTitle.scrollView.contentOffset.y = (355*currentZoomScale*webViewContent.scrollView.zoomScale) + zoomPadding 
     webViewContent.scrollView.contentOffset.x = webViewTitle.scrollView.contentOffset.x 
    }else{ 
     webViewTitle.scrollView.contentOffset.y = (355*currentZoomScale*webViewContent.scrollView.zoomScale) + zoomPadding 
     webViewTitle.scrollView.contentOffset.x = webViewContent.scrollView.contentOffset.x 
    } 
} 

Czy którekolwiek z nich spowodowało, że przekątne przewijanie stało się błędne?

Odpowiedz

0

Czy którekolwiek z nich spowodowało, że przekątna przewinięcia stała się błędna?

Tak

Z dostarczonego kodu, jesteś realizacji UIScrollViewDelegate dla UIWebView, ale w obu pokazanych przykładach wykonania, nie wzywają super. Oznacza to, że wersja scrollView nie będzie miała standardowego działania, a zamiast tego będzie ściśle używać kodu do zachowania w postaci scrollViewDidScroll i scrollViewDidZoom.

Chociaż ta question niekoniecznie zapewnia dużo jasności co do tego, co się dzieje, uważam, że jest to ten sam problem, z którym się borykasz.

Reasumując: Jako minimum, zadzwoń super dla każdej implementacji delegat UIScrollViewDelegate, lub jeśli nie potrzeba żadnych niestandardowych zachowań przewijania następnie wyjąć delegate całkowicie.

+0

Czy możesz opracować więcej o nazwie "super"? W tej implementacji nie podklasy "UIWebView" ani "UIScrollView". Ten fragment kodu znajduje się w mojej podklasie View Controller, nazywając 'super' tutaj, nazywam' UIViewController', który nie jest 'UIScrollViewdelegate'. Przez wywołanie 'superView' z' scrollView', nazywam 'contentView' mojego kontrolera widoku, który jest po prostu' UIView' –

Powiązane problemy