web-dev-qa-db-fra.com

Les boutons UIB situés au bas de UIScrollView ne fonctionnent pas

J'ai créé un UIScrollView dans mes story-boards et j'ai ajouté 12 boutons UIB dans une vue de conteneur qui se trouve dans UIScrollView.

lors de l'exécution sur le simulateur iPhone 5s, 9 des boutons sont visibles à l'écran, les autres boutons uniquement lorsque vous faites défiler l'écran.

les 9 boutons initialement visibles à l'écran peuvent être interagis. Cependant, il est impossible d'interagir avec les 3 boutons situés au bas de la vue de défilement (sur lesquels il faut faire défiler l'écran pour être vus).

J'ai lancé l'application sur un simulateur iPhone 6 qui affiche les 12 boutons à l'écran sans avoir à faire défiler l'écran et les 3 boutons du bas fonctionnent.

J'utilise autolayout.

J'ai essayé de bidouiller avec le contentSize d'UIScrollView et cela n'aide pas. 

16
Wesley Ow

Il semble que vous deviez augmenter la hauteur du cadre de la vue conteneur. La contentSize de scrollView affecte uniquement la manière dont il défilera, ce qui n’est pas pertinent ici.

Si le bouton est en dehors de la vue du conteneur, il sera toujours affiché. Cependant, il ne peut répondre à aucun événement tactile.

34
skyline75489

lors de l'utilisation de scrollview dans le storyboard avec autolayout. il est généralement configuré à l'aide d'une vue de contenu à l'intérieur de la vue de défilement qui contiendra toutes les autres vues (par exemple, des boutons, des étiquettes, etc.), la vue de contenu étant généralement définie pour avoir la même hauteur et la même largeur. 

pour que votre vue de contenu augmente sa hauteur, vous devez ajouter une contrainte de hauteur, puis l’affecter à un point de vente afin que vous puissiez facilement manipuler sa valeur dans votre code. définissez ensuite la priorité de contrainte de hauteur de la vue du contenu sur 1000 ("obligatoire") et définissez la priorité de contrainte "largeur égale sur: vue" de la vue du contenu sur 750 (élevée).

4
vinceville

Pour moi, il ne s'agissait que de Décocher la case à cocher Ajuster les incrustations d'affichage de défilement dans le storyboard de ce ViewController.

 enter image description here

PS: Les réponses ci-dessus n'ont pas fonctionné pour moi.

3
Vigneshwaran.m

Une autre option consiste à réduire la priorité de la contrainte Content View.Center Y.

Dans Xcode 9, j’ai disposé le contentView au besoin et le bouton étendu au-dessous de la vue sur l’iPhone 5. J'ai redimensionné de façon dynamique les propriétés scrollView.contentSize.height et contentView.frame dans le contrôleur de vue. Le scrollView a défilé pour moi mais je ne pouvais toujours pas sélectionner le bouton et je voyais des avertissements dans le Storyboard.

Une fois que j'ai réduit la priorité sur la contrainte d'alignement Centre Y de contentView, les avertissements dans Storyboard ont disparu et j'ai pu faire défiler l'écran jusqu'en bas et sélectionner le bouton sur le simulateur iPhone 5.

 enter image description here

REMARQUE: je vérifie toujours la taille du périphérique et redimensionne la valeur scrollView.contentSize.height dans viewWillLayoutSubviews () pour les petits périphériques.

override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        scrollView.contentSize.height = (UIDevice.current.isSmallDevice) ? 560 : contentView.frame.size.height
    }

(UIDevice.current.isSmallDevice est un appel à une extension de UIDevice qui renvoie une valeur bool déterminée par la taille de l'écran)

1
B-Rad

Ajoutez toutes les sous-vues du conteneur à ScrollView. Et cache le conteneur. Assurez-vous que le conteneur (ContainerView de scrollView) doit également être une sous-vue de scrollView.

0
Jeet