web-dev-qa-db-fra.com

Conception à l'intérieur d'une scrollview dans xcode 4.2 avec des storyboards

J'ai une uiscrollview à défilement vertical - imaginez une page "à propos de cette application" d'une application de barre d'onglets qui continue un peu et nécessite une vue de défilement. Il ne contient que quelques images, une vidéo et du texte (seule la vidéo a été codée - le reste a été placé dans l'interface graphique). Dans le storyboard (Interface Builder?) Xcode 4.2, tout est configuré comme il se doit et fonctionne correctement, mais la vue est uniquement aussi grande que ce que vous voyez à l'écran, n'est-il pas possible d'organiser manuellement dans le storyboard les éléments qui sont initialement hors écran - que vous devez faire défiler jusqu'à? La seule façon que j'ai trouvée jusqu'à présent est de les concevoir sur la vue visible puis de les naviguer vers le bas avec les touches fléchées.

27
John

Je ressens ta douleur. La seule façon que j'ai trouvée est de déplacer manuellement la vue de défilement dans l'inspecteur de taille pour révéler la partie de la vue que vous souhaitez modifier visuellement.

Utilisez une vue UIV pour contenir des éléments afin qu'ils soient positionnés par rapport à cette vue. Ajoutez la vue en tant que sous-vue à la vue de défilement à 0,0.

  1. panoramique: utilisez la coordonnée Y, par exemple -200, puis modifiez le contenu.
  2. pour placer plus de contenu dans la partie cachée, effectuez un nouveau panoramique pour révéler de nouveaux biens immobiliers
  3. une fois terminé, restaurez les valeurs de la hauteur et de la position X, Y du ScrollView.

Assurez-vous que le rectangle du cadre de la vue de défilement est plus petit que la vue contenue.

39
David

Dans le storyboard, sélectionnez le viewController, puis dans l'inspecteur d'attributs, changez "taille" en "forme libre". Modifiez ensuite la "hauteur" de la vue vue/défilement pour qu'elle soit aussi grande que nécessaire. Les paramètres par défaut des entretoises et des ressorts doivent veiller à redimensionner correctement la vue lorsque l'application est exécutée, mais vous devez vérifier à nouveau.

51
agilityvision

Nouveau: 26/03/2013

Je suis tombé sur ce que je pense être un moyen encore plus simple de traiter UIScrollView directement dans le storyboard.

  1. Aucun code nécessaire, juste les paramètres du storyboard. C'est peut-être nouveau dans iOS6.1/Xcode 4.6
  2. Pas besoin de désactiver les contraintes (cochez la case "Utiliser la mise en page automatique" dans l'inspecteur de fichiers pour le fichier de storyboard)
  3. Pas besoin d'ajouter UIScrollView * scrollView; en .h
  4. Pas besoin d'ajouter self.scrollView.contentSize = ... dans les remplacements de viewWillAppear ou viewDidLoad

Voici ce que j'ai fait (parties importantes surlignées avec **): (voir code )

  1. Créer un nouveau projet avec le storyboard activé
  2. Déposer une UIScrollView, définir la classe dans l'inspecteur d'identité pour le contrôleur de vue
  3. Dans l'inspecteur d'attributs, remplacez la taille sous les mesures simulées par Freeform **
  4. Sélectionnez la vue de défilement; Dans l'inspecteur d'attributs, activez "scroll enabled" et "background" sur "White" (vous comprendrez pourquoi - si vous ne le faites pas)
  5. Sous Inspecteur de taille (avec la vue de défilement sélectionnée), modifiez la hauteur à 900 par exemple **
  6. Ajouter des boutons, un en haut et un en bas
  7. Ajoutez un gestionnaire par défaut pour buttonTouchUpInside pour les deux boutons et connectez simplement Expéditeur.

Voir Code Sélectionnez le contrôleur de vue et faites défiler la vue et vérifiez les inspecteurs.

25
Dickey Singh

Modifiez simplement la 'Taille simulée' du contrôleur de vue en forme libre et définissez une hauteur plus grande que la taille habituelle, vous pourrez voir toutes les prises que vous devez modifier.

11
TechSeeko

Sur iOS 6.0, vous pouvez faire glisser une vue de conteneur dans votre vue de défilement. Cela créera automatiquement une nouvelle vue pour votre contenu, en dehors de la scène actuelle. Vous pouvez ensuite redimensionner cette vue aussi grande que nécessaire pour l'adapter à votre contenu.

Je pense que vous devrez toujours définir la hauteur du contenu ScrollView au moment de l'exécution, mais au moins vous pouvez concevoir votre vue de contenu à la fois sans avoir à faire défiler de haut en bas sur IB.

4
Eneko Alonso

Décochez simplement les "Sous-vues de redimensionnement automatique" de toute vue que vous essayez de redimensionner et cela devrait empêcher tous vos objets de se redimensionner avec.

2
CDixon

Je développe actuellement une application pour iOS 7, et j'ai fait exactement la réponse de @Dickey Singh, mais cela ne fonctionne pas au début. Après avoir vérifié le storyboard, j'ai constaté que nous devons également ajouter des contraintes de mise en page automatique pour le contrôleur de vue qui détient le scrollView. Il semble que de telles contraintes de mise en page automatique seraient ajoutées automatiquement avant Xcode 5, mais nous devons maintenant le faire nous-mêmes. La façon d'ajouter des contraintes: Sélectionnez d'abord le contrôleur de vue dans le storyboard; Entrez "Editor" dans le menu supérieur; Sélectionnez "Résoudre les problèmes de mise en page automatique"; Sélectionnez 'Ajouter des contraintes manquantes dans le conteneur'. Terminé :-)

0
Kun Hu

Je me bats avec ça depuis un moment maintenant, et chaque chose que j'ai essayée a échoué.

Plus précisément, ce que j'essaie de réaliser est une boîte de dialogue modale de taille libre avec une vue déroulante contenant un conteneur pour une autre vue. J'ai eu beaucoup de résultats variés, y compris parfois le faire fonctionner correctement. Le plus souvent, je le trouve exactement correct, mais sans défilement.

En enfin téléchargé le code de Dickey Singh, qui fonctionnait parfaitement mais n'avait rien de spécial. (Excellente solution propre BTW). J'ai donc ajouté une vue conteneur, exactement comme je l'avais dans mon code, et elle s'est cassée!

Après quelques expériences, j'ai réfléchi à ce qui se passe. Restez avec moi.

1) En utilisant la disposition automatique, la taille de la vue de défilement semble dicter les limites de défilement. La définition de "contentSize" dans "USer Defined Runtime Attributes" semble n'avoir aucun effet sur cela, pas plus que la définition de "contentSize" ou "bounds" dans "viewWillDisplay" ou "viewDidLoad". Ainsi, si la taille initiale de la vue de défilement est 800x800, ce sera tout l'espace qui peut être affiché. Pour cette raison, lorsque je veux une zone de défilement, je crée une vue de conteneur, puis je place la vue de défilement dans le contenu.

2) Sans mise en page automatique, la définition de "contentSize" dans "User Defined Runtime Attributes" fonctionne, tout comme en la programmant dans "viewDidLoad". Je préfère utiliser les "Attributs d'exécution définis par l'utilisateur" car il conserve la taille avec la mise en page. Cette solution vous permet d'utiliser la vue de défilement avec plus de flexibilité, car elle peut être de n'importe quelle taille au moment de la conception.

3) Indépendamment de la disposition automatique, si une vue dans la région de défilement correspond exactement aux limites du cadre horizontal ou vertical, la vue de défilement cesse de fonctionner comme une vue de défilement. Cela s'applique à mon propre code et au code de Dickey Singh dans toutes les configurations possibles que j'ai essayées.

Je n'ai aucune idée de ce qui cause (3), mais c'est clairement un bug.

J'espère que cela aide tous ceux qui ont du mal à utiliser la vue de défilement. J'imagine que certaines personnes les utilisent sans aucun problème, et certains (comme moi) ont eu des problèmes avec eux.

0
Owen Godfrey

Voici ma solution pour concevoir un ScrollView avec un contenu plus grand que l'écran entièrement dans Storyboard (enfin, à l'exception d'une seule ligne de code :-):

https://stackoverflow.com/a/19476991/1869369

0
Ronny Webers