cocoa macos layout nsview

cocoa - ¿Tiene NSView algo análogo a los métodos setNeedsLayout/layoutSubviews de UIView?



macos (4)

¿Pongo tales cosas en el método de visualización? ¿O hay algo análogo?


A partir de OSX 10.7:

  • (void) el diseño es equivalente a layoutSubviews

Ahora hay un setNeedsLayout idéntico.

Sustituya este método si su vista personalizada necesita realizar un diseño personalizado no expresable utilizando el sistema de diseño basado en restricciones. En este caso, usted es responsable de llamar a setNeedsLayout: cuando algo que impacta en su diseño personalizado cambia.

No puede invalidar ninguna restricción como parte de su fase de diseño ni invalidar el diseño de su supervista o vistas fuera de su jerarquía de vistas. Tampoco puede invocar un pase de dibujo como parte del diseño.

Debe llamar a [superdisposición] como parte de su implementación.


A veces, resizeSubviewsWithOldSize no se llama. Luego, intente anular el resizeWithOldSuperviewSize .


resizeSubviewsWithOldSize: parece que no hace nada. Nunca me llaman para nada. Tal vez sea porque utilizo el diseño automático y la documentación dice que está relacionado con el ajuste automático.

El diseño de NSView parece ser el mismo que el layoutSubviews de UIView . Ambos son reemplazables si quieres hacer algún trabajo especial para reemplazar o además de reajustar automáticamente o auto-ajustar.

Llamar esto a UIView

[view setNeedsLayout];

parece ser el mismo que este en NSView

view.needsLayout = YES;

Lo cual plantea la pregunta, ¿por qué "setNeedsLayout" es incluso un nombre de función? ¿De verdad, decidiste eliminar el parámetro de una función setter y mantener el "set" en el título? ¿Por qué no "scheduleLayout"? Esto evitaría la necesidad de preguntas de desbordamiento de pila como esta.


Análogamente a layoutSubviews es el método resizeSubviewsWithOldSize: de NSView . Supongo que, análoga a setNeedsLayout , llamaría resizeSubviewsWithOldSize:[self frame].size directamente.