Est-ce que quelqu'un sait comment empêcher une UIWebView de rebondir verticalement? Je veux dire lorsqu'un utilisateur touche son écran d'iphone, fait glisser son doigt vers le bas et que la vue Web affiche un espace vide au-dessus de la page Web que j'ai chargée?
J'ai examiné les solutions possibles suivantes, mais aucune n'a fonctionné pour moi:
http://forums.macrumors.com/showthread.php?t=619534
Comment empêcher un UIScrollView de rebondir horizontalement?
ios
objective-c
iphone
uiscrollview
uiwebview
Brad Parks
la source
la source
Réponses:
... semble bien fonctionner.
Il sera également accepté sur l'App Store.
Mise à jour : dans iOS 5.x +, il existe un moyen plus simple -
UIWebView
possède unescrollView
propriété, de sorte que votre code peut ressembler à ceci:Il en va de même
WKWebView
.la source
UIWebView
afin que je puisse appeler[webView setBounces:NO]
où je voulais.Je regardais un projet qui facilite la création d'applications Web en tant qu'applications installables à part entière sur l'iPhone appelé QuickConnect , et j'ai trouvé une solution qui fonctionne, si vous ne voulez pas du tout que votre écran puisse défiler, ce qui dans mon cas Non.
Dans le projet / blog mentionné ci-dessus, ils mentionnent une fonction javascript que vous pouvez ajouter pour désactiver le rebond, ce qui se résume essentiellement à ceci:
Si vous voulez en savoir plus sur la façon dont ils l'implémentent, téléchargez simplement QuickConnect et vérifiez-le .... Mais en gros, tout ce qu'il fait, c'est appeler ce javascript au chargement de la page ... J'ai essayé de le mettre en tête de mon document, et cela semble bien fonctionner.
la source
Eh bien, tout ce que j'ai fait pour y parvenir est:
Fonctionne bien pour moi ... En outre, la réponse cochée pour cette question est celle qu'Apple rejettera si vous l'utilisez dans votre application iphone.
la source
UIScrollView
première sous-vueUIWebView
pourrait bien être le cas pour l'instant, mais cela pourrait facilement changer dans les futures mises à jour (même mineures) d'iOS ou de configurations particulières. Vous devriez vraiment faire unefor
itérationsubviews
pour trouver leUIScrollView
(ce n'est vraiment pas beaucoup de travail et au moins vous êtes assuré d'obtenir unUIScrollView
et de ne pas planter votre programme ...Dans le SDK iOS 5, vous pouvez accéder directement à la vue de défilement associée à une vue Web au lieu de parcourir ses sous-vues.
Donc, pour désactiver le «rebond» dans la vue de défilement, vous pouvez utiliser:
Voir la référence de classe UIWebView .
(Cependant, si vous devez prendre en charge les versions du SDK avant 5.0, vous devez suivre les conseils de Mirek Rusin .)
la source
Swift 3
la source
Avertissement. J'ai utilisé setAllowsRubberBanding: dans mon application, et Apple l'a rejeté, déclarant que les fonctions API non publiques ne sont pas autorisées (cite: 3.3.1)
la source
Dans Swift pour désactiver les rebonds
la source
La méthode de Brad a fonctionné pour moi. Si vous l'utilisez, vous voudrez peut-être le rendre un peu plus sûr.
Si Apple change quelque chose, le rebond reviendra - mais au moins votre application ne plantera pas.
la source
Sur iOS5 uniquement si vous prévoyez de laisser les utilisateurs zoomer sur le contenu de la vue Web (ei: appuyez deux fois), le paramètre de rebond n'est pas suffisant. Vous devez également définir les propriétés alwaysBounceHorizontal et alwaysBounceVertical sur NO, sinon lors d'un zoom arrière (un autre double tapotement ...) par défaut, il rebondira à nouveau.
la source
J'ai parcouru la collection des sous-vues d'UIWebView et défini leurs arrière-plans sur [UIColor blackColor], la même couleur que l'arrière-plan de la page Web. La vue rebondira toujours mais elle ne montrera pas ce laid fond gris foncé.
la source
Il me semble que l'UIWebView a un UIScrollView. Vous pouvez utiliser des API documentées pour cela, mais le rebond est défini dans les deux sens, pas individuellement. C'est dans la documentation de l'API. UIScrollView a une propriété de rebond, donc quelque chose comme ça fonctionne (je ne sais pas s'il y a plus d'une scrollview):
la source
J'étais ennuyé de découvrir que UIWebView n'est pas une vue de défilement, j'ai donc créé une sous-classe personnalisée pour accéder à la vue de défilement de la vue Web. Cette sous-classe contient une vue de défilement afin que vous puissiez personnaliser le comportement de votre vue Web. Les punchlines de cette classe sont:
}
Ensuite, lorsque vous créez une vue Web personnalisée, vous pouvez désactiver le rebond avec:
Il s'agit d'un excellent moyen général de créer une vue Web avec un comportement de défilement personnalisable. Il y a juste quelques points à surveiller:
la source
Je suis tombé sur cette recherche d'une réponse et j'ai finalement eu de la chance d'avoir ma propre réponse en me moquant. J'ai fait
et ça a marché.
la source
Cela a fonctionné pour moi, et magnifiquement aussi (j'utilise phonegap avec webView)
ou
la source
J'ai essayé une approche légèrement différente pour empêcher les objets UIWebView de défiler et de rebondir: ajouter un reconnaisseur de gestes pour remplacer les autres gestes.
Il semble que UIWebView ou sa sous-vue de défilement utilise son propre identificateur de mouvement panoramique pour détecter le défilement de l'utilisateur. Mais selon la documentation d'Apple, il existe un moyen légitime de remplacer un identificateur de gestes par un autre. Le protocole UIGestureRecognizerDelegate a une méthode gestureRecognizer: shouldRecognizeSimultaneousWithGestureRecognizer: - qui permet de contrôler le comportement de tout identificateur de mouvements en collision.
Donc, ce que j'ai fait
dans la méthode viewDidLoad du contrôleur de vue:
puis, la méthode de remplacement de geste:
Bien sûr, cette méthode déléguée peut être plus complexe dans une application réelle - nous pouvons désactiver d'autres reconnaisseurs de manière sélective, en analysant otherGestureRecognizer.view et prendre une décision en fonction de la vue.
Et, enfin, par souci d'exhaustivité, la méthode que nous avons enregistrée en tant que gestionnaire de pan:
il peut être vide si tout ce que nous voulons est d'annuler le défilement et le rebond des vues Web, ou il peut contenir notre propre code pour implémenter le type de mouvements de panoramique et d'animations que nous voulons vraiment ...
Jusqu'à présent, je ne fais qu'expérimenter avec toutes ces choses, et cela semble fonctionner plus ou moins comme je le veux. Cependant, je n'ai pas encore essayé de soumettre des applications à iStore. Mais je crois que je n'ai encore rien utilisé sans papiers ... Si quelqu'un le trouve autrement, veuillez m'en informer.
la source
Voici deux nouvelles solutions potentielles. Apparemment, vous pouvez utiliser jqtouch ou pastrykit pour désactiver le défilement. Cependant, je n'ai pas réussi à les faire fonctionner. Vous pourriez être plus compétent.
désactivation du défilement vertical
creuser dans la pâtisserie
la source
positionnement fixe sur safari mobile
Ce lien m'a beaucoup aidé ..... C'est facile .. Il y a une démo ..
la source
(Exemple SDK Xcode 5 iOS 7) Voici un exemple d'application universelle utilisant la fonction scrollview setBounces. Il s'agit d'un projet / exemple open source situé ici: Lien vers SimpleWebView (projet Zip et exemple de code source)
la source
L'une des sous-vues de
UIWebView
devrait être aUIScrollView
. Définissez sascrollEnabled
propriété surNO
et la vue Web aura le défilement entièrement désactivé.Remarque: cela utilise techniquement une API privée et votre application pourrait donc être rejetée ou planter dans les futures versions du système d'exploitation. Utiliser
@try
etrespondsToSelector
la source
Examinez la
bounces
propriété deUIScrollView
. Quoth les documents Apple:Assurez-vous que vous utilisez le bon
UIScrollView
. Je ne sais pas à quoi ressemble la hiérarchie pour unUIWebView
, mais la vue de défilement pourrait être un parent, pas un enfant, duUIWebView
.la source
Pour désactiver le
UIWebView
défilement, vous pouvez utiliser la ligne de code suivante:Dans cet exemple,
ObjWebview
est de typeUIWebView
.la source
webView.scrollView.scrollEnabled = NO; webView.scrollView.bounces = NON;
la source