62 votes

Quand translatesAutoresizingMaskIntoConstraints doit-il être défini sur true?

J'ai lu la documentation. Mais je ne sais pas encore quand j'ai besoin de pas à false. Dans le code ci-dessous si je l'ai mis à l' false je ne les vois pas l'en-tête à tous. Si je laisse comme true, alors tout va bien.

Les éléments suivants en Vue de débogage hiérarchie de donner un avertissement "de largeur et de position sont ambigus".

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let header = UIView()
    header.translatesAutoresizingMaskIntoConstraints = false
    header.backgroundColor = .orange
    header.heightAnchor.constraint(equalToConstant: 10).isActive = true

    return header
}

Je pensais à chaque fois que j'ai besoin de modifier quoi que ce soit dans le code je dois régler translatesAutoresizingMaskIntoConstraints de false.

C'est peut-être plus correct de dire si vous devez retirer toutes ses contraintes affecter false , puis ajouter ce que vous aimez, et dans ce cas, vous avez besoin d'ajouter des contraintes pour l'ensemble des 4 côtés.

Toutefois, si vous avez besoin pour maintenir juste ce que le système offre à vous, dans ce cas, ce serait la tableView la gestion de sa position et de la largeur puis laissez true.

Est ce que le droit?

76voto

Paulw11 Points 11557

translatesAutoresizingMaskIntoConstraints doit être définie sur la valeur false lorsque:

  1. Vous Créez un UIView-en fonction de l'objet dans le code (table de montage séquentiel/PLUME sera réglé pour vous si le fichier a mise en page automatique activé),
  2. Et vous souhaitez utiliser la mise en page automatique de ce point de vue, plutôt que basé sur le cadre de mise en page,
  3. Et la vue sera ajoutée à la vue de la hiérarchie qui est à l'aide de mise en page automatique.

Dans ce cas, il n'est pas vrai. Plus précisément, le point 2.

Après le retour à la vue d'en-tête de viewForHeaderInSection il est ajouté à la vue de la table et de ses frame est fixée en fonction de la largeur actuelle de la vue de la table et de la hauteur de votre retour de heightForHeaderInSection.

Vous pouvez ajouter des sous-vues à la racine de la vue d'en-tête (header dans votre code) et les contraintes d'utilisation à la disposition de ceux des sous-vues par rapport à la vue d'en-tête.

Vous avez découvert la raison pour laquelle vous ne pouvez pas utiliser la mise en page automatique pour l'en-tête de la vue elle-même dans vos commentaires; lors de la création de la vue, il n'est pas encore le point de vue de la hiérarchie et donc vous ne pouvez pas contraindre ses arêtes de quoi que ce soit.

Afin d'avoir en tête dynamique de dimensionnement, vous aurez besoin d'ajouter des sous-vues de votre header afficher et ajouter des contraintes entre ces sous-vues et header. Ensuite, mise en page automatique pouvez utiliser la valeur intrinsèque de la taille du contenu de header afin de déterminer l'en-tête de la vue de la taille.

Puisque vous n'êtes pas contraignant le cadre de l' header, ne définissez pas d' translatesAutoresizingMaskIntoConstraints de false. Vous devez vous assurer que vous avez suffisamment de contraintes sur votre sous-vues pour la mise en page automatique pour déterminer la taille de l' header.

Vous aurez besoin d'une ligne continue, de contraintes, de haut en bas et éventuellement quelques contraintes de hauteur pour votre sous-vues si la valeur intrinsèque de la taille du contenu de la sous-vue n'est pas suffisant.

Tous les sous-vues vous ajoutez à l' header ne doivent translatesAutoresizingMaskIntoConstraints ensemble de false

Vous devez également renvoyer quelque chose d' estimatedHeightForHeaderInSection - le plus près de votre en-tête de la hauteur du mieux - si vous utilisez tableview.sectionHeaderHeight = UITableViewAutomaticDimension

49voto

PANKAJ VERMA Points 1770
  • Pour créé par programmation de la vue par défaut est true et pour vues de l'Interface Constructeur par défaut est false

    Si la propriété est (ou un ensemble de) à True, le système crée automatiquement un ensemble de contraintes basés sur la vue de l'image et du son d'un redimensionnement automatique de masque. Et si vous ajoutez vos propres contraintes, ils ont inévitablement en conflit avec l'générée automatiquement des contraintes. Cela crée une unsatisfiable mise en page. Ainsi, Lorsque par programmation de l'instanciation de points de vue, assurez-vous de régler leurs translatesAutoresizingMaskIntoConstraints propriété à PAS.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X