Relativelayout ou LinearLayout dans le développement de l'iPhone?
Je veux ajouter une sous-vue du haut de mon point de vue, je dois recalculer l'origine o de la valeur pour tous les autres points de vue et re-positionner à laisser de l'espace pour l'ajout d'une nouvelle vue.
Il est très ennuyeux, car je sais android ont relativelayout ou linearlayout peut aider à faire automatiquement.
Comment résoudre ce problème facilement en développement ios?
source d'informationauteur virsir
Vous devez vous connecter pour publier un commentaire.
J'ai créé une bibliothèque de résoudre simplement ce problème: CSLinearLayoutView
Vous l'utiliser comme ceci:
J'ai essayé de faire un parent (linéaire) de mise en page pour un certain temps et a finalement décidé de tout sous-classe UIScrollView faire.
J'ai commencé à simplement remplacer layoutSubviews avec une simple boucle à travers les sous-vues pour réinitialiser les origines tout en gardant à l'exécution de Y. Mais, certaines choses inattendues sont ajoutés à la scrollview, y compris UIInlineAutoCorrect points de vue à partir d'objets textfield/points de vue, ce qui signifie que ces choses étaient déformés par la mise en page. J'ai donc ajouté un peu de logique qui utilise la propriété tag de UIView afin de déterminer si je dois la déposer:
Si vous souhaitez tout de même utiliser des balises uniques à vos points de vue, vous devez simplement spécifier une gamme de balises qui seront inclus dans la mise en page au lieu d'une valeur unique.
Ce n'est pas beaucoup de travail à la sous-classe
UIView
à donner un sens à des méthodes comme-(void)addView:toRightOfView:
etc. Vous pourriez faire ce que vous allez, le portage uniquement les méthodes dont vous avez besoin. Vous pouvez ensuite appeler ces dans votre remplacement delayoutSubviews
Benjamin indique.Points de vue peuvent être construits à l'aide de l'IB ou ils peuvent être écrits par programme; Android scores bien ici à faire des mises en page lisible et vous pouvez apporter que des avantages pour iOS vues créé par programmation. Qu'il existe quelques appareils iOS signifie au-delà de la lisibilité il n'y a pas (encore?) de nombreux avantages pratiques de ce modèle.
NB. Un "XIB" le fichier est un fichier XML. L'ouvrir dans votre éditeur de texte favori et de prendre un coup d'oeil.
** EDIT.
Voici un exemple rapide, j'ai frappé vers le haut. Il n'a pas été testé, mais quelque chose comme cela fonctionne dans votre sous-classe de
UIView
(appelerUIRelativeView
peut-être).Vous avez pas de chance ici. iOS n'ont pas de dispositions permettant de positionner les points de vue dans différentes mises en page comme Android. Vous avez besoin de repositionner tous les autres sous-vues pour faire la place à la nouvelle vue.
Il y a quelques vue de redimensionnement des méthodes comme
sizeToFit
etautoResizingMask
mais ils ne vous aidera pas dans votre cas ici.iOS est beaucoup plus centrée sur le pixel de précision que Android c'est, qui utilise relative mises en page comme il se doit les traiter avec plusieurs tailles d'écran. Cependant, dans l'iOS, l'Interface Builder est un très bon outil inclus dans XCode, que vous pouvez utiliser.
Aussi, si vous êtes juste en ajoutant des sous-vues de façon répétitive, vous pourriez remplacer le
layoutSubviews
de la méthode et de l'utiliser pour gérer au travail manuel pour vous. Vous avez mentionné avoir à "recalculer l'origine o de la valeur pour tous les autres points de vue et re-positionner à laisser de l'espace pour l'ajout d'une nouvelle vue" ... Vous pourriez code dans votrelayoutSubviews
de sorte que vous n'avez pas à le faire vous-même à chaque fois.Malheureusement, le SDK ne pas avoir tout ce inclus par défaut.
autoresizingMask
's sont grands, mais vous ne pouvez pas l'utiliser pour la mise en page initiale; c'est automatique qu'en réalité, c'lors de la rotation de seulement.Comme de l'iOS 9, vous pouvez utiliser
UIStackView
qui fonctionne de manière similaire àLinearLayout
: vous ajoutez des points de vue et la vue de la pile arrange comme il convient en fonction de votre dimensionnement des préférences:Remplissage de congé de trois d'entre eux leur taille normale, et de faire de la quatrième prendre le plus de place. Il utilise la Mise en page Automatique du contenu d'étreindre la priorité à décider lequel d'étirement.
Remplir tout Aussi fera de chaque sous-vue de la même taille afin qu'elles remplissent tout l'espace disponible à la vue de la pile.
Remplir Proportionnellement utilise la valeur intrinsèque de la taille du contenu de chaque sous-vue de les redimensionner d'un montant égal. Donc 1 a été conçu pour avoir deux fois plus de hauteur que les vues 2, 3 et 4, ce rapport restera quand ils sont redimensionnées – tous les sous-vues obtenez proportionnellement plus grand ou plus petit.
Égale à l'Espacement ne pas redimensionner les sous-vues, et au lieu de redimensionner l'espacement entre les sous-vues pour remplir l'espace.
L'égalité de Centrage est le plus compliqué, mais pour beaucoup de gens aussi le plus esthétique. Elle cherche à s'assurer que les centres de chaque sous-vue sont également espacés.
Vous pouvez également définir l'espacement entre les points de vue dans la vue de la pile, ajoutant un peu de rembourrage.
AVERTISSEMENT: Lors de l'ajout de vue de la pile de l'enfant vues dans le code, vous devez toujours utiliser
addArrangedSubview()
comme ceci:Si vous essayez d'utiliser un bon vieux
addSubview()
il ne fonctionne pas correctement, parce que la vue de la pile ne sais pas pour l'arranger.Que pour le retirer, vous devez être prudent d'utiliser
stackView.removeArrangedSubview(someView)
etsomeView.removeFromSuperview()
sinon, la vue ne sera pas supprimé correctement.Vous pourriez trouver mon UIStackView tutoriel utile.