À l'aide du Générateur d'interface, vous pouvez sélectionner les coins auxquels un objet doit adhérer lors du redimensionnement. Comment pouvez-vous faire cela par programme?Cocoa NSView modification des propriétés autosizing
Répondre
Voir la méthode setAutoresizingMask: de NSView et la resizing masks associée.
Voici un lien de travail vers les [masques de redimensionnement] (https://developer.apple.com/documentation/appkit/nsview.autoresizingmask) –
Chaque vue possède le masque de drapeaux, contrôlé en définissant une propriété autoresizingMask avec le OU des comportements souhaités à partir du resizing masks. En outre, le superview doit être configuré sur resize its subviews.
Enfin, en plus des options de redimensionnement de masque défini de base, vous pouvez parfaitement contrôler la mise en page des sous-vues par la mise en œuvre -resizeSubviewsWithOldSize:
Je trouve que les autoresizingBit
masques sont horriblement nommés, donc j'utiliser une catégorie sur NSView à rendre les choses un peu plus explicite:
// MyNSViewCategory.h:
@interface NSView (myCustomMethods)
- (void)fixLeftEdge:(BOOL)fixed;
- (void)fixRightEdge:(BOOL)fixed;
- (void)fixTopEdge:(BOOL)fixed;
- (void)fixBottomEdge:(BOOL)fixed;
- (void)fixWidth:(BOOL)fixed;
- (void)fixHeight:(BOOL)fixed;
@end
// MyNSViewCategory.m:
@implementation NSView (myCustomMethods)
- (void)setAutoresizingBit:(unsigned int)bitMask toValue:(BOOL)set
{
if (set)
{ [self setAutoresizingMask:([self autoresizingMask] | bitMask)]; }
else
{ [self setAutoresizingMask:([self autoresizingMask] & ~bitMask)]; }
}
- (void)fixLeftEdge:(BOOL)fixed
{ [self setAutoresizingBit:NSViewMinXMargin toValue:!fixed]; }
- (void)fixRightEdge:(BOOL)fixed
{ [self setAutoresizingBit:NSViewMaxXMargin toValue:!fixed]; }
- (void)fixTopEdge:(BOOL)fixed
{ [self setAutoresizingBit:NSViewMinYMargin toValue:!fixed]; }
- (void)fixBottomEdge:(BOOL)fixed
{ [self setAutoresizingBit:NSViewMaxYMargin toValue:!fixed]; }
- (void)fixWidth:(BOOL)fixed
{ [self setAutoresizingBit:NSViewWidthSizable toValue:!fixed]; }
- (void)fixHeight:(BOOL)fixed
{ [self setAutoresizingBit:NSViewHeightSizable toValue:!fixed]; }
@end
qui c un alors utilisé comme suit:
[someView fixLeftEdge:YES];
[someView fixTopEdge:YES];
[someView fixWidth:NO];
En fait, oui. J'ai travaillé sur une interface utilisateur personnalisée pour une interface à écran tactile, et Interface Builder n'est tout simplement pas le bon outil pour ce travail. J'ai tout fait dans le code, et je n'ai pas regardé en arrière. –
Merci, ce code est utile. – Karolis
@Karolis: Content de l'entendre. Merci d'avoir pris le temps de laisser une note. –
@ e.James réponse m'a donné une idée de simplement créer une nouvelle ENUM avec appellation plus familière:
typedef NS_OPTIONS(NSUInteger, NSViewAutoresizing) {
NSViewAutoresizingNone = NSViewNotSizable,
NSViewAutoresizingFlexibleLeftMargin = NSViewMinXMargin,
NSViewAutoresizingFlexibleWidth = NSViewWidthSizable,
NSViewAutoresizingFlexibleRightMargin = NSViewMaxXMargin,
NSViewAutoresizingFlexibleTopMargin = NSViewMaxYMargin,
NSViewAutoresizingFlexibleHeight = NSViewHeightSizable,
NSViewAutoresizingFlexibleBottomMargin = NSViewMinYMargin
};
En outre, de mes recherches, j'ai découvert que @ James.s a un bug grave dans les ajouts NSView. Le système de coordonnées de Cocoa a un axe Y retourné en termes de système de coordonnées iOS. Par conséquent, afin de fixer le fond et la marge supérieure, vous devez écrire:
- (void)fixTopEdge:(BOOL)fixed
{ [self setAutoresizingBit:NSViewMaxYMargin toValue:!fixed]; }
- (void)fixBottomEdge:(BOOL)fixed
{ [self setAutoresizingBit:NSViewMinYMargin toValue:!fixed]; }
De la documentation du cacao:
NSViewMinYMargin
The bottom margin between the receiver and its superview is flexible. Available in OS X v10.0 and later.
+1 pour l'approche hybride! Je n'ai jamais eu de problèmes avec ce code, mais peut-être que c'est une différence entre OSX et iOS? Maintenant vous m'avez curieux ... –
- 1. Modification des propriétés Active Directory
- 2. Modification des propriétés d'un document PDF
- 3. ASP.net: Modification des propriétés de WebControl par défaut
- 4. Modification des propriétés DataGridViewRow dans un autre thread
- 5. Modification des noms de propriétés dans les requêtes JPA
- 6. NSView laisse des artefacts sur un autre NSView lorsque le premier est déplacé sur le second
- 7. Besoin d'aide: VS 2005 Propriétés Modification
- 8. Trouver la dernière date de modification d'un fichier dans Cocoa
- 9. Comment mettre un contrôle normal dans un NSView?
- 10. Comment obtenir la taille interne/client d'une sous-classe NSView?
- 11. Réinitialisation des propriétés d'une grille de propriétés
- 12. Impossible de masquer les contrôles dans NSView
- 13. Variation NSWindow et calque NSView en haut
- 14. Modification des propriétés CSS spécifiques aux médias à partir de Javascript
- 15. ASP.NET MVC: modification des propriétés du modèle lors de la publication
- 16. Flex: modification des propriétés de contrôle en fonction du contenu d'un événement de liaison de données
- 17. Détermination de l'instance de NSView qui a initié un mouseDown:
- 18. DataGridViewComboBoxColumn - modification des éléments
- 19. Hériter des propriétés css
- 20. Accessibilité des propriétés abstraites
- 21. Modification des entités dans le EntityFramework
- 22. Cocoa: Envoie des données de classe à l'interface utilisateur (Databinding?)
- 23. Création de contrôles par programmation dans Cocoa
- 24. Cocoa-Touch: redimensionnement dynamique des vues
- 25. Réglage des performances dans l'application Cocoa
- 26. Jouer des sons purs dans Cocoa Touch
- 27. Contrôle Cocoa pour la configuration des raccourcis
- 28. Que se passe lorsque vous effectuez des tâches à des champs ou des propriétés des propriétés
- 29. Modification des vues de UISegmentedControl
- 30. Modification des fenêtres d'interpréteur python
S'il vous plaît noter que Apple a introduit un [ Cadre AutoLayout] (http://developer.apple.com/library/mac/#releasenotes/UserExperience/RNAutomaticLayout/_index.html#//apple_ref/doc/uid/TP40010631) pour Lion. – JJD