Usando el constructor de interfaz puede seleccionar las esquinas a las que debe adherirse un objeto al cambiar el tamaño. ¿Cómo puedes hacer esto programáticamente?Cocoa NSView cambio de propiedades de autosizing
Respuesta
Ver el método de NSView y la resizing masks asociado setAutoresizingMask:.
Aquí hay un enlace de trabajo a las [máscaras de cambio de tamaño] (https://developer.apple.com/documentation/appkit/nsview.autoresizingmask) –
Cada vista tiene la máscara de indicadores, controlada al establecer una propiedad de autoresizingMask con el OR de los comportamientos que desee del resizing masks. Además, la supervista debe configurarse en resize its subviews.
Por último, además de las opciones básicas para cambiar el tamaño de la máscara definidos, se puede controlar totalmente el diseño de subvistas mediante la implementación de -resizeSubviewsWithOldSize:
Me parece que los autoresizingBit
máscaras son terriblemente nombrados, así que usar una categoría en NSView a hacer las cosas un poco más explícito:
// 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
cual C a continuación, un aspecto siguientes:
[someView fixLeftEdge:YES];
[someView fixTopEdge:YES];
[someView fixWidth:NO];
En realidad, sí. He estado trabajando en una interfaz de usuario personalizada para una interfaz de pantalla táctil y Interface Builder simplemente no es la herramienta adecuada para ese trabajo. He estado haciendo todo en código, y no he mirado hacia atrás. –
Gracias, este código es útil. – Karolis
@Karolis: Me alegra oírlo. Gracias por tomarse el tiempo de dejar una nota. –
@ respuesta e.James me dio una idea simplemente crear una nueva enumeración de nombres con más familiar:
typedef NS_OPTIONS(NSUInteger, NSViewAutoresizing) {
NSViewAutoresizingNone = NSViewNotSizable,
NSViewAutoresizingFlexibleLeftMargin = NSViewMinXMargin,
NSViewAutoresizingFlexibleWidth = NSViewWidthSizable,
NSViewAutoresizingFlexibleRightMargin = NSViewMaxXMargin,
NSViewAutoresizingFlexibleTopMargin = NSViewMaxYMargin,
NSViewAutoresizingFlexibleHeight = NSViewHeightSizable,
NSViewAutoresizingFlexibleBottomMargin = NSViewMinYMargin
};
Asimismo, desde mi investigación, descubrí que @ James.s tiene un error grave en las adiciones NSView. El sistema de coordenadas en Cocoa tiene un eje y invertido en términos de sistema de coordenadas iOS. Por lo tanto, con el fin de fijar la parte inferior y superior del margen, se debe escribir:
- (void)fixTopEdge:(BOOL)fixed
{ [self setAutoresizingBit:NSViewMaxYMargin toValue:!fixed]; }
- (void)fixBottomEdge:(BOOL)fixed
{ [self setAutoresizingBit:NSViewMinYMargin toValue:!fixed]; }
A partir de los documentos de cacao:
NSViewMinYMargin
The bottom margin between the receiver and its superview is flexible. Available in OS X v10.0 and later.
+1 para el enfoque híbrido! Nunca he tenido problemas con ese código, pero tal vez sea una diferencia entre OSX e iOS. Ahora me tienes curiosidad ... –
- 1. Falta la configuración de propiedad de Autosizing para NSView
- 2. Copie NSView en cocoa/objective-c
- 3. drawrect Vs layoutsubviews - NSView - Cocoa touch
- 4. Crear NSScrollView de forma programada en un NSView - Cocoa
- 5. ¿Cómo agregar un NSView a NSWindow en una aplicación Cocoa?
- 6. Autosizing textarea usando Prototype
- 7. ¿Cómo cambio las Vistas en una aplicación Cocoa?
- 8. Propiedades de cambio de nombre de Json.net
- 9. Escribo mis propias propiedades @dynamic en Cocoa
- 10. WPF: cómo detener TextBox de autosizing?
- 11. esquinas redondas para autosizing UIView
- 12. Cómo bloquear eventos NSView en otro NSView?
- 13. NSView Color de borde
- 14. Clave Valor Observando en Cocoa, analizando el cambio de propiedad
- 15. Configuración de problemas autosizing en el constructor de interfaces
- 16. Contexto de dibujo de NSView
- 17. Animar setHidden: en NSView mediante enlaces de cacao
- 18. Comportamiento de ajuste de tamaño de NSView
- 19. Cambiar orden de subvistas NSView
- 20. cómo observar cambio en las propiedades NSObject
- 21. Cambio de propiedades de solo lectura con reflexión
- 22. cambio de propiedades de IEnumerator <T> .Current
- 23. Cambio de propiedades CSS específicas de medios desde Javascript
- 24. .NET - Excel ListObject autosizing en databind
- 25. Superposición NSView sobre NSScrollView
- 26. NSView ratón seguimiento
- 27. NSView: Arrastrando la vista
- 28. ¿Cómo imprimir una jerarquía de control en Cocoa?
- 29. Creación mediante programación de controles en Cocoa
- 30. ¿Cómo hacer que NSView no recorta su área de delimitación?
Tenga en cuenta que Apple presentó un [ Marco de AutoLayout] (http://developer.apple.com/library/mac/#releasenotes/UserExperience/RNAutomaticLayout/_index.html#//apple_ref/doc/uid/TP40010631) para Lion. – JJD