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.
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.
Assurez-vous que le rectangle du cadre de la vue de défilement est plus petit que la vue contenue.
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.
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.
Voici ce que j'ai fait (parties importantes surlignées avec **): (voir code )
Voir Code Sélectionnez le contrôleur de vue et faites défiler la vue et vérifiez les inspecteurs.
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.
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.
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.
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é :-)
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.
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 :-):