7
votes

Contrainte de hauteur fixe sur UIView

J'ai un uIView à l'intérieur de ma mise en page afin de faire une coupure et un regroupement, mais l'autolayouet le redimensionne quand rétréci. Je veux lui donner une hauteur fixe mais la seule option consiste à définir l'espace supérieur et inférieur.

Y a-t-il un moyen de définir une contrainte de hauteur explicite?


0 commentaires

7 Réponses :


-4
votes

Essayez ceci xxx


1 commentaires

Il utilise des contraintes, pas des punaises et des sources. ils ne sont pas interchangeables.



3
votes

Oui et Non. Dans Autolayout Vous ne pouvez pas définir de contrainte pour la taille d'un UIView, vous pouvez empêcher que UIView d'être "compressé" au-delà de sa taille intrinsèque . .

Cela contraindre efficacement une vue, tout en évitant le danger d'avoir une vue de vue parent une vue d'enfant d'une certaine taille (et de supprimer ainsi la partie «auto» de l'autolayouet).

Pour définir ces priorités, vous utilisez: SetContentCommressionResistancePriority: Foraxis:

du Apple UIView Documentation :

Les vues personnalisées doivent définir des valeurs par défaut pour les deux orientations sur la création, en fonction de leur contenu, typiquement de NslayoutPriorityDefaultlow ou de NslayoutPiorityDefaultHigh. Lors de la création d'interfaces utilisateur, le concepteur de présentation peut modifier ces priorités pour des vues spécifiques lorsque la conception de la mise en page globale nécessite des compromis différents que les priorités naturelles des vues utilisées dans l'interface.

Les sous-classes ne doivent pas remplacer cette méthode.

OK, nous savons maintenant comment attribuer une priorité pour éviter que notre vue soit plus petite que sa taille intrinsèque, mais comment définir la taille intrinsèque?

Eh bien, si vous utilisez un élément UI standard, vous êtes déjà défini! Mais si votre UIView est personnalisé, vous devrez remplacer - (CGSIZE) intrinsèque pour renvoyer la taille correcte. Ici, vous pouvez mesurer toutes les sous-vues que la vue doit calculer les dimensions correctes - ou si vous utilisez des éléments d'art / de la taille constante, vous pouvez renvoyer une valeur codée dur.

Encore une fois, depuis le Apple < Code> UIView Documentation :

Les vues personnalisées ont généralement des contenus qu'ils affichent du système de mise en page ignorant. Le remplacement de cette méthode permet à une vue personnalisée de communiquer au système de mise en page Quelle taille qu'il souhaiterait être basée sur son contenu. Cette taille intrinsèque doit être indépendante du cadre de contenu, car il n'ya aucun moyen de communiquer de manière dynamique une largeur modifiée sur le système de mise en page basé sur une hauteur modifiée, par exemple.

Apple fortement conseille contre l'inspection de quoi que ce soit en dehors de votre UIView (comme pour obtenir la taille de votre super vue et modifier cela) car ce n'est pas ce que l'autolamayout est (et peut causer de mauvaises maux de tête sur la route) .


0 commentaires

0
votes

Vous n'avez pas besoin de lui donner un espace supérieur et un espace inférieur. Si vous avez une contrainte de fond de dire 8 pixels à partir du bas de la vue SuperView, il essaiera toujours de redimensionner la vue enfant pour rester dans la super vue (selon vos priorités).

Vous pouvez donner la contrainte de hauteur une priorité plus élevée que la contrainte d'espace inférieure, alors quand elles sont en conflit, il choisira de faire respecter la contrainte de hauteur et d'ignorer la contrainte inférieure.

Pour les contraintes, vous n'avez pas besoin de 4 contraintes (haut, bas, gauche et droite); Vous n'avez jamais besoin de 2: vertical et horizontal. Le reste est figuré par l'autolamay.

Enlevez simplement la contrainte inférieure et la vue enfant doit être coupée.


0 commentaires

1
votes

Oui, vous pouvez lui donner une hauteur fixe.

Vous devez spécifier au moins deux contraintes dans chaque dimension. Vous ne pouvez donc pas supprimer l'espace supérieur ou inférieur avant d'ajouter la contrainte de hauteur fixe. Dans IB, sélectionnez votre vue, puis en bas à droite de l'éditeur d'affichage, il y a un bouton avec trois icônes, appuyez sur le milieu et sélectionnez «Hauteur». Cela ajoute la contrainte de hauteur. Maintenant, vous pouvez utiliser l'espace inférieur ou supérieur et vous pouvez modifier la contrainte de hauteur si vous avez besoin en cliquant dessus dans l'inspecteur de la taille.


0 commentaires

3
votes
  1. Sélectionnez votre vue dans l'inspecteur à gauche du constructeur d'interface.
  2. Ctrl Faites glisser une ligne de la vue sur elle-même.

    => Une popover apparaît là où vous pouvez définir des contraintes de hauteur et de largeur explicites.


1 commentaires

Pour moi, cela ne fonctionne pas sur le parent de niveau supérieur UIView d'un groupe. Aucune ponphère n'apparaît.



5
votes

Je viens de trouver cette réponse ( Contrainte de mise en page automatique: comment faire une vue maintient son rapport largeur / hauteur lors de la redimensionner? ). C'est ce que ma mise en œuvre ressemble à: xxx


0 commentaires

3
votes

Code SWIFT de Eckyzero code.

let heightConstraint = NSLayoutConstraint(item: yourView, 
                                      attribute: .Height, 
                                       relatedBy: .Equal, 
                                             toItem: nil, 
                              attribute: .NotAnAttribute, 
                             multiplier: 1, constant: 80)//your desired height

yourView.addConstraint(heightConstraint)


0 commentaires