Mise en page automatique par programmation sur une sous-vue d'un sous-classé UIView
J'ai sous-classé UIView pour faire un custom groupView-je utiliser pour ajouter un peu de choses à ma mise en page d'une manière simple. Cette groupView comprend un UILabel qui est utilisé comme un titre et une UIView qui dessine un roundRect sur c'est CALayer avec une couleur d'arrière-plan. Pensez UITableView de sections. J'ajoute cette groupView à la table de montage séquentiel par la suppression d'une UIView et de le changer de classe à mon sous-classe. Tout fonctionne bien, je passe la tête par l'Utilisateur défini exécution des attributs dans Xcode. Tout fonctionne très bien, j'ai ajouter UILabels de ce point de vue sur le storyboard et il crée l'en-tête de l'étiquette et roundrect lorsqu'il s'exécute.
la structure de ma groupView:
- groupView: (UIView)clipToBounds:AUCUN;
- rubrique: (UILabel) positionné
au-dessus de la groupView. - contentView:(UIView) crée le roundRect
et la couleur via CALayer, devrait être de la même taille que le groupView.
- rubrique: (UILabel) positionné
Quel est donc le problème? Ainsi, en traitant avec mise en page automatique est une douleur pour commencer, mais pour ce sous-classé UIView de travail, j'ai besoin de mettre la contentView contraintes de la programmation. Je ne peux pas comprendre la syntaxe de cette disposition automatique ASCII chaîne de format. Actuellement, j'ai:
_contentView = [[UIView alloc]initWithFrame:self.bounds];
_contentView.layer.cornerRadius = 5.0f;
_contentView.layer.masksToBounds=YES;
_contentView.backgroundColor=_backgroundColor;
_contentView.layer.borderWidth=_borderWidth;
_contentView.layer.borderColor=_borderColor.CGColor;
[self insertSubview:_contentView atIndex:0];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(self,_contentView);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"[self]-0-[_contentView]-0-[self]" options:0 metrics:nil views:viewsDictionary];
for (NSLayoutConstraint *constraint in constraints) {
[_contentView addConstraint:constraint];
}
Qui se bloque avec: * Résiliation d'application en raison de uncaught exception 'NSGenericException', la raison: "Impossible d'installer contrainte sur la vue. La contrainte de référence de quelque chose de l'extérieur de la sous-arborescence de la vue? C'est illégal. contrainte: vue:>'
J'ai essayé cette première et il ne fonctionne toujours pas:
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(_contentView);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-0-[_contentView]-0-|" options:0 metrics:nil views:viewsDictionary];
Qui se bloque avec: * Résiliation d'application en raison de uncaught exception 'NSGenericException', la raison: "Impossible d'installer contrainte sur la vue. La contrainte de référence de quelque chose de l'extérieur de la sous-arborescence de la vue? C'est illégal. contrainte: vue:>'
Coup de gueule: d'une certaine façon cette mise en page automatique est supposer pour nous sauver de travail, mais
Je ne vois pas comment les avantages poids de la surcharge droit maintenant. Pourquoi
sur la terre ont-ils passer de l'aide de références et de méthodes ou de même type
defs à ce archaïque chaîne de format? Comment beaucoup plus facile serait de faire:
[_contentView contrainte:NSLayoutFormatAlignLeading toView:auto
withDistance:0.0 f]; OU quelque chose de similaire? Je voudrais tellement plutôt traiter
avec des ressorts et des jambes de suspension à ce point.
Toute aide à la compréhension, ou en me montrant la syntaxe pour contraindre la contentView à la taille de l'auto serait utile.
Si quelqu'un d'autre est d'avoir des problèmes de compréhension de cette ASCII-Art chaîne de format, j'ai trouvé ce tutoriel utile. Je sais que c'est pour Ruby, mais la chaîne de format est le même que dans le cas d'Objective-C. seanlilmateus.github.com
OriginalL'auteur brucemartin | 2012-11-20
Vous devez vous connecter pour publier un commentaire.
L'erreur vous indique ce que vous devez savoir:
Oui, il le fait. Il fait référence à son superview.
Ces contraintes sont de décisions doivent être appliquées à la superview, dans ce cas, le
groupView
.Penser comme ça: c'est une contrainte sur le placement et la taille de la
contentView
dans legroupView
. Voir Installer des Contraintes de l'article : developer.apple.com/library/mac/#documentation/UserExperience/...ok, oui je vois que maintenant, c'est pourquoi les contraintes dans Xcode spectacle sous la superViews pas la vue elle-même. Ayant toujours des problèmes de syntaxe. Retour à la docs, peut-être qu'il va couler en ce moment. Merci pour l'aperçu.
OriginalL'auteur jackslash
Le caractère qui représente le superview dans le format visuel de la langue, donc je pense que vous voulez:
et ensuite, vous devez ajouter la contrainte de l'auto à la place de la contentView, comme vous devez l'ajouter à un point de vue qui peut voir l'ensemble des acteurs impliqués.
Ici est la référence pour le langage visuel:
https://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/AutolayoutPG/Articles/formatLanguage.html#//apple_ref/doc/uid/TP40010853-CH3-SW1
Vous pouvez également éviter le format visuel entièrement à l'aide:
OriginalL'auteur Jon Hull
essayez de vérifier le constrints , qu'ils sont en droit d'ajouter à la vue
par exemple:
s'ajouter
heightAnchor to
yellowView
comme suivre . il affichera l'erreurOriginalL'auteur ph zean