Concevoir à l'intérieur d'un scrollview en Xcode 4.2 avec des storyboards

j'ai un UIScrollView à défilement vertical - imaginez une page 'about this app' d'une application de barre d'onglets qui va sur un peu et nécessite un scrollview. 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 storyboard (Interface Builder?) Xcode 4.2, tout est mis en place comme il se doit et fonctionne bien, mais la vue est seulement aussi grand que ce que vous voyez sur l'écran, est - il impossible d'organiser manuellement dans le storyboard les éléments qui sont initialement hors écran - que vous avez besoin de faire défiler jusqu'à? Le seul moyen que j'ai trouvé jusqu'à présent est de les concevoir sur la vue visible puis les Naviguer vers le bas avec les touches fléchées..

27
demandé sur John 2012-01-11 00:22:32

9 réponses

je ressens votre douleur. La seule façon que j'ai trouvée est de parcourir 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 UIView pour contenir les éléments afin qu'ils soient positionnés par rapport à cette vue. Ajoutez la vue comme une sous-vue au scrollview à 0,0.

  1. pan: utilisez la coordonnée y say to -200, puis modifiez le contenu.
  2. pour placer plus de contenu dans la partie cachée, pan à nouveau pour révéler de nouveaux immobilier
  3. une fois terminé, restaurer les valeurs de la hauteur du ScrollView et de la position X,Y.

assurez-vous que le rectangle du cadre de la vue scroll est plus petit que la vue du contenu.

39
répondu David 2012-04-06 01:31:59

dans le storyboard, sélectionnez le viewController, puis dans les attributs inspector, changez "size" en "freeform". Puis changez la' hauteur ' de la vue view/scroll à aussi grand que vous avez besoin. Les paramètres par défaut des Struts et des springs doivent prendre soin de redimensionner la vue correctement lorsque l'application est lancée, mais vous devez vérifier deux fois.

51
répondu agilityvision 2012-01-11 03:48:48

Nouveau: 3/26/2013

je suis tombé sur ce que je pense est une façon encore plus simple de traiter UIScrollView directement dans storyboard.

  1. pas besoin de code, juste des paramètres de storyboard. C'est peut-être nouveau dans iOS6.1 / Xcode 4.6
  2. Pas besoin de désactiver les contraintes (décochez la case "Utiliser la mise en forme automatique" dans le Fichier Inspecteur du storyboard fichier)
  3. pas besoin d'ajouter UIScrollView* scrollView; in .h
  4. Pas besoin d'ajouter de l'auto.le scrollView.contentSize = ... dans overrides of viewWillAppear ou viewDidLoad

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

  1. Créer un nouveau projet avec storyboard activé
  2. Chute dans un UIScrollView, l'ensemble de la classe dans l'identité de l'inspecteur pour afficher contrôleur
  3. dans les attributs Inspecteur, changer la taille sous les mesures simulées pour Freeform**
  4. sélectionnez scroll View; dans attributs inspector, activez "scroll enabled" et "arrière-plan" à "Blanc" (vous allez comprendre pourquoi - si vous n'avez pas)
  5. sous la taille Inspecteur (avec la vue de rouleau sélectionnée) changer la hauteur à 900 par exemple**
  6. Ajouter des boutons, l'un en haut et un en bas
  7. Ajouter un handler par défaut pour les deux boutons de buttonTouchUpInside et simplement Log sender.

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

25
répondu Dickey Singh 2013-06-21 05:05:03

il suffit de changer la 'taille simulée' du contrôleur de vue pour freeform et définir une hauteur qui est plus grande que la taille habituelle, vous serez en mesure de voir toutes les sorties que vous devez éditer.

10
répondu TechSeeko 2015-02-28 11:17:07

sur iOS 6.0 vous pouvez faire glisser une vue conteneur à l'intérieur de votre vue Scroll. Cela créera automatiquement une nouvelle vue pour votre contenu, en dehors de la scène actuelle. Vous pouvez alors redimensionner cette vue aussi grand que nécessaire pour s'adapter à votre contenu.

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

4
répondu Eneko Alonso 2012-10-07 18:23:33

il suffit de décocher "Autoresize subviews" de n'importe quelle vue que vous essayez de redimensionner et cela devrait empêcher tous vos objets de redimensionner avec elle.

2
répondu CDixon 2012-06-13 20:51:57

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

en particulier, ce que j'essaie d'obtenir est un dialogue modal de taille libre avec une vue scrollable contenant un conteneur pour une autre vue. J'ai eu beaucoup de résultats variés, y compris parfois d'avoir qu'il fonctionne correctement. La plupart du temps, je l'ai l'air exactement correcte, mais sans défilement.

in a finalement téléchargé le code de Dickey Singh, qui a fonctionné parfaitement mais n'avait rien de spécial. (Excellente solution propre BTW). Donc, j'ai ajouté une vue de conteneur à elle, exactement comme j'avais dans mon code, et il s'est cassé!

après quelques expériences, j'ai compris ce qui se passait. Il suffit de porter avec moi.

1) en utilisant la mise en page automatique, la taille de la vue de défilement semble dicter ce que seront les limites de défilement. Définir "contentSize" dans "USer Defined Runtime Attributes" semble n'avoir aucun effet sur cela, et définir "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, quand je veux une région de scrollable, je crée une vue de conteneur et puis mettre la vue de défilement à l'intérieur du contenu.

2) sans mise en page automatique, le réglage de "contentSize" dans "User Defined Runtime Attributes"fonctionne, tout comme le réglage programmatique dans "viewDidLoad". Je préfère utiliser "User Defined Runtime Attributes" parce qu'il conserve la taille avec la mise en page. Cette solution vous permet d'utiliser scrolling view avec plus de flexibilité, car il peut être de n'importe quelle taille au moment de la conception.

3) indépendamment de la mise en page automatique, si une vue dans la région de défilement correspond exactement aux limites horizontales ou verticales du Cadre, alors 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é.

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

j'espère que cela aidera tout le monde là-bas qui a du mal à utiliser scroll view. J'imagine que certaines personnes les utilisent sans aucun problème, et d'autres (comme moi) ont eu des problèmes avec eux.

0
répondu Owen Godfrey 2013-06-03 12:57:47

voici ma solution pour concevoir un ScrollView avec un contenu plus grand que l'écran entièrement en Storyboard (enfin, sauf pour 1 ligne de code: -):

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

0
répondu Ronny Webers 2017-05-23 11:54:12

je suis en train de développer une application pour iOS 7, et j'ai fait exactement comme la réponse de @Dickey Singh, mais ça ne marche pas au début. Après avoir vérifié le storyboard, j'ai trouvé que nous devons aussi 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 le Xcode 5, mais maintenant nous devons 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 du haut; sélectionnez "Résoudre les problèmes de mise en page automatique"; sélectionnez "Ajouter des contraintes manquantes dans le conteneur". Fait :-)

0
répondu Kun Hu 2014-01-02 17:15:37