Quand doit-translatesAutoresizingMaskIntoConstraints être défini à true?
J'ai lu le la documentation. Mais je ne sais pas encore quand j'ai besoin de ne pas mettre à false
. Dans le code ci-dessous si je l'ai mis à false
je ne les vois pas l'en-tête. Si je laisse comme true
, alors tout va bien.
Suivantes en Vue de débogage hiérarchie de donner un avertissement "largeur et 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
}
J'ai pensé quand j'ai besoin de modifier quoi que ce soit dans le code je dois régler translatesAutoresizingMaskIntoConstraints
à false
.
C'est peut-être plus correct de dire si vous devez retirer toutes ses contraintes, puis le mettre à 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 laisser true
.
Est ce que le droit?
false
, alors la trame est ignorée et le positionnement et la taille doit être complètement spécifié par NSLayoutConstraint
s. Si vous le réglez à true
, puis le frame
seront traduites en contraintes par iOS.si je l'ai mis à
true
ce qui se passe pour les contraintes que j'ajoute moi-même? En outre, quel est le moyen recommandé d'ajouter des contraintes à viewForHeaderInSection
?S'il est défini à
true
, et vous ajoutez vos propres contraintes, vous obtiendrez des conflits de contraintes et le système fera de son mieux deviner lequel utiliser, qui vous pourriez avoir de la chance et il semble fonctionner, mais il ne sera certainement pas pour le client!Si vous avez fourni une solution à vos commentaires, je n'ai pas compris :/ Votre affirmant qu'il pourrait créer des conflits. Alors, comment suis-je suppose que pour ajouter une hauteur de contrainte à cela? (Je ne veux pas utiliser des images, parce que je veux vous utilisez des en-têtes dynamiques hauteurs.)
Peut-être que ceci de l'aide.
OriginalL'auteur Honey | 2017-12-13
Vous devez vous connecter pour publier un commentaire.
translatesAutoResizingMaskIntoConstraints
doit être définie sur la valeur false lorsque: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é),Dans ce cas ne sont pas toutes vraies. 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 sesframe
est fixée en fonction de la largeur actuelle de la vue de la table et de la hauteur de votre retour deheightForHeaderInSection
.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 etheader
. Ensuite, la mise en page automatique pouvez utiliser la valeur intrinsèque de la taille du contenu deheader
pour déterminer l'en-tête de la vue de la taille.Puisque vous n'êtes pas contraignant le cadre de
header
, ne définissez pastranslatesAutoResizingMaskIntoConstraints
à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 deheader
.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.
Tout sous-vues vous ajoutez à
header
ne besointranslatesAutoResizingMaskIntoConstraints
ensemble defalse
Vous devez également renvoyer quelque chose de
estimatedHeightForHeaderInSection
- le plus près de votre en-tête de la hauteur du mieux - si vous utiliseztableview.sectionHeaderHeight = UITableViewAutomaticDimension
En fait, je viens de commande cliqué sur
UITableViewAutomaticDimension
et ce sont les commentaires: "// le Retour de cette valeur de tableView:heightForHeaderInSection: ou tableView:heightForFooterInSection: résultats, à une hauteur qui correspond à la valeur retournée par // tableView:titleForHeaderInSection: ou tableView:titleForFooterInSection: si le titre n'est pas nul. "Désolé, j'ai clarifié le dernier paragraphe de ma réponse; Vous ne pouvez pas utiliser la mise en page automatique pour les
header
vue, mais vous pouvez utiliser la mise en page automatique pour les sous-vues de ce point de vue et il devrait fonctionner pour vous.La façon dont je vois maintenant c'est: à l'aide de la traduction des contraintes de l'en-tête est contraint de tous les 4 bords à ses superview. Si j'ai mis le
translatesAutoResizingMaskIntoConstraints
pour l'en-tête lui-même àfalse
tous ceux qui seront effacées. Mais j'en ai besoin, donc je dois le gardertrue
. , je suis en ajoutant plus de contraintes pour ses sous-vues. Pour ceux des sous-vues, ils ont tous besoin detranslatesAutoResizingMaskIntoConstraints
ensemble defalse
, les contraintes qu'ils ajoutent à l'en-tête ne sera pas en conflit à la traduction des contraintes...Qui est correct. La tableview va prendre soin de toutes les contraintes requises pour la
header
vue (ou son image directement, il ne devrait pas question pour vous)OriginalL'auteur Paulw11
Pour créé par programmation de la vue par défaut est vrai et pour
vues de l'Interface Constructeur par défaut est faux
Si la propriété est (ou un ensemble de) Vrai, 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 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.
OriginalL'auteur PANKAJ VERMA