Comment puis-je mettre à jour ce code de contrainte pour iPhone X et up? Ce code ne prend pas en charge les nouvelles tailles de vues et je me sens comme s'il pouvait être modifié un peu pour correspondre aux nouvelles spécifications. Si une mise à jour soit faite dans la fonction contenant addConstraintres code>?
@implementation UIView (JSQMessages)
- (void)jsq_pinSubview:(UIView *)subview toEdge:(NSLayoutAttribute)attribute
{
[self addConstraint:[NSLayoutConstraint constraintWithItem:self
attribute:attribute
relatedBy:NSLayoutRelationEqual
toItem:subview
attribute:attribute
multiplier:1.0f
constant:0.0f]];
}
- (void)jsq_pinAllEdgesOfSubview:(UIView *)subview
{
[self jsq_pinSubview:subview toEdge:NSLayoutAttributeBottom];
[self jsq_pinSubview:subview toEdge:NSLayoutAttributeTop];
[self jsq_pinSubview:subview toEdge:NSLayoutAttributeLeading];
[self jsq_pinSubview:subview toEdge:NSLayoutAttributeTrailing];
}
@end
3 Réponses :
Ceci est le code que j'utilise pour quelque chose de similaire. Ajustez au goût.
+ ( void ) embed:( UIView * ) child into:( UIView * ) parent { [parent addSubview:child]; [child.topAnchor constraintEqualToAnchor:parent.topAnchor].active = YES; [child.rightAnchor constraintEqualToAnchor:parent.rightAnchor].active = YES; [child.leftAnchor constraintEqualToAnchor:parent.leftAnchor].active = YES; [child.bottomAnchor constraintEqualToAnchor:parent.bottomAnchor].active = YES; }
C'est bien parce qu'il utilise la notation d'ancrage, comme je l'ai suggéré. Mais notez qu'il n'a toujours rien à voir avec la zone de sécurité, comme indiqué par le titre de la question. Nous avons vraiment besoin de plus de clarification de la pop avant qu'une réponse soit possible.
Conseil 1: Commencez à utiliser la syntaxe moderne ...
Astuce 2: N'utilisez pas «Aides de contrainte», à moins que cela n'améliore vraiment votre code et votre flux de travail. P>
Conseil 3: Voici un moyen Pour se conformer à la zone de sécurité: p>
Merci à tous pour les réponses, j'ai fini par créer une extension pour le délégué et manipulé des contraintes de cette façon. Cela sera utile à l'avenir pour quiconque utilisant le forfait JSQMessages obsolète! Merci encore pour l'aide.
extension JSQMessagesInputToolbar { override open func didMoveToWindow() { super.didMoveToWindow() if #available(iOS 11.0, *), let window = self.window { let anchor = window.safeAreaLayoutGuide.bottomAnchor bottomAnchor.constraint(lessThanOrEqualToSystemSpacingBelow: anchor, multiplier: 0.3).isActive = true } } }
Pouvez-vous expliquer quel est le problème? La phrase "Les nouvelles tailles de vues" ou "nouvelles spécifications" n'a pas de sens. Le code fait exactement ce qu'il dit que cela va faire: il épine une sous-vision exactement au SuperView (
auto code>). Cela fonctionne exactement comme ça a toujours; Il n'y a rien à "mettre à jour". Si vous voulez faire quelque chose d'autre - et je parie que vous faites, bien que vous n'ayez pas expliqué - alors faites autre chose.
J'ajouterais également que personne n'utilise plus l'initialiseur NslayoutConstraint. Utilisez la notation anchor i>. Si vous souhaitez encore plus de raccourcissement, vous pouvez utiliser une bibliothèque comme Snapkit (bien que personnellement, je ne suis pas en faveur d'interposant une dépendance supplémentaire pour quelque chose d'aussi crucial).