4
votes

WKWebView dans la vue de défilement

Comment puis-je mettre un WKWebView dans une vue de défilement, considérant que je dois avoir d'autres éléments après la vue Web.

. Vue ... Affichage de défilement ....... ImageView ....... WKWebView ....... Bouton

Voir l'image de démonstration

  • Problème 1: désactiver le défilement pour WKWebView
  • Problème 2: définir la hauteur totale du contenu pour WKWebView

Consultez mon exemple de projet


7 commentaires

Consultez cette question pour désactiver le défilement: stackoverflow.com/questions/28631317/...


Je n'ai pas compris la partie avec des éléments après Web View . Pourriez-vous clarifier un peu les choses?


Veuillez lire ceci, puis modifier votre question: stackoverflow.com/help/mcve vous devez rendre la tâche aussi simple que possible pour que les gens vous aident .


@Mosbah je l'ai déjà essayé, mais le scroll est verrouillé sur WBWebView et ne remplit pas toute la hauteur de leur contenu


@Glenn J'ai mis à jour le texte de la question, désolé


@Magnas merci, j'ai mis à jour le texte de la question .. Je suis désolé


Vérifiez ma réponse, @AlanBarboza


3 Réponses :


0
votes

Selon ce que vous comprenez, vous voulez que la vue Web ne défile pas correctement si la page est plus grande que votre écran, elle défilera vers la droite? Pour afficher la page complète. Bien que vous puissiez modifier isscrollingenabled en false à partir du générateur d'interface ou du code en utilisant l'objet de scrollview. Pour définir la hauteur totale, donnez la contrainte 0,0,0,0 de tous les côtés et cela s'étendra sûrement à tout l'écran


3 commentaires

Maintenant, le défilement de WKWebView reste verrouillé, mais la hauteur de WKWebView reste fixe ... J'ai poussé les modifications au projet dans Github


@AlanBarboza Je poste ma réponse dans 1 min.


c'est une longue minute



12
votes

Si vous voulez obtenir la hauteur du contenu du html dans WKWebView pour le rendre non défilable dans UIScrollView , continuez à lire.

Vous devez observer (via un délégué) la hauteur du contenu de votre webView. Je vous donne ces étapes, car vous savez très bien ce que vous faites, et vous y êtes presque.

Créez une sortie de votre contrainte de hauteur webView p>

extension ViewController: WKNavigationDelegate {
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
            self.constraint_WebViewHeight.constant = webView.scrollView.contentSize.height
        }
    }
}

Abonnez-vous au délégué de webView

Cela vous informera (votre contrôleur lorsque votre webView aura fini de charger le contenu de votre site .

self.webView.navigationDelegate = self

Conforme au protocole

Dans la méthode didFinish navigation de WKNavigationDelegate , vous ajustez ensuite la constante de votre contrainte de hauteur webView. Mettez de l'animation si vous le souhaitez :)

@IBOutlet weak var constraint_WebViewHeight: NSLayoutConstraint!

Enfin, corrigez vos contraintes.

a. Supprimez votre contrainte de fond imageView. b. Ajoutez une contrainte de fond à votre bouton de sauvegarde dans le scrollView.

Cela rendra votre scrollView scrollable.

Voila! Cela donne ce résultat.

 entrez la description de l'image ici

J'espère que cela vous aidera!


2 commentaires

Cela résout vraiment le problème, je suis très reconnaissant .. Merci!


L'application plantera en raison d'impacts sur la mémoire si vous essayez de charger la page avec beaucoup d'images



0
votes

C'est une mauvaise approche. Vous devez utiliser le scrollView de WKWebView.

Vous avez besoin de réserver un espace pour l'image et le bouton avec des marges html en utilisant javascript

[NSString stringWithFormat:@"document.body.style.margin = '%dpx %dpx %dpx %dpx'", (int)margins.top, (int)margins.right, (int)margins.bottom, (int)margins.left]

ou directement dans le corps html si vous pouvez y accéder.

Ajouter imageview et bouton dans scrollView de WKWebView.


0 commentaires