2012-08-30 14 views
8

Tengo un plumín con autodiseño habilitado que contiene las vistas de un controlador de vista y, por separado, una ventana con una vista de marcador de posición para agregarlas. El marcador de posición tiene restricciones relativas a su supervista y otras vistas en la ventana, y antes de involucrar mi controlador de vista, tengo el marcador de posición cambiando el tamaño de la ventana de la manera que quiero. Más tarde cargué el plumín y agregué su vista de nivel superior como subvista del marcador de posición, y también creo restricciones manualmente para mantenerlo alineado con los bordes del marcador de posición.El autodesplazamiento está cambiando el tamaño de mi ventana

Todo bien, y estoy usando este patrón en varias instancias dentro de mi aplicación, pero en algunos de esos casos, después de agregar la vista, mi ventana cambia de tamaño. Se está reduciendo al tamaño mínimo para la vista agregada en lugar de que la vista se expanda al tamaño actual de la ventana.

Hasta ahora, la única forma que he encontrado para evitar esto es que al agregar la vista y crear sus restricciones, también establece el marco de la vista para darle el tamaño inicial para el estado actual del marcador de posición y la ventana. Eso está bien algunas veces, pero quiero ser capaz de definir restricciones que son más complicadas que simplemente alinear cada borde con una supervista de marcador de posición. No quiero codificar la aritmética de cuadros para cada uno de esos casos.

¿Alguien sabe lo que está pasando? Si la ventana ya está dictando el tamaño de mi marcador de posición, y no al revés, ¿qué debo hacer al agregar la subvista para hacer que el tamaño actual de la ventana siga teniendo prioridad?

He visto el menú emergente en las ventanas de IB de Xcode que parece tratarse de restricciones que afectan solo a las subvistas vs también a la supervista (establecido en la primera para todas mis puntas), ¿qué está pasando con esta funcionalidad? No he encontrado nada más sobre eso todavía.

+0

no puedes establecer una restricción de anchura en la vista personalizada (marcador)? – codingFriend1

+1

Edité mi publicación para aclarar esto, espero. Mi marcador de posición ya tiene restricciones para darle el comportamiento correcto al cambiar el tamaño de la ventana. Agregar restricciones de tamaño fijo al agregar la subvista lo rompería. –

+0

Si sus restricciones son correctas, entonces el tamaño de la ventana estaría funcionando. –

Respuesta

9

Desea establecer la prioridad de resistencia a la compresión a algo inferior a NSLayoutPriorityWindowSizeStayPut que es 500. Esto significa que el tamaño de la ventana tiene prioridad sobre el tamaño de la vista.

Puede configurar esto desde el inspector de tamaño IB.

Compression resistance priority

O se puede establecer mediante programación con -[NSView setContentCompressionResistancePriority:forOrientation:]

+0

Parece correcto que este es un problema prioritario. Sin embargo, en el caso que provocó esta publicación, la ventana era más grande que lo que necesitaba la subvista agregada. La subvista no se habría comprimido, sino que se habría expandido (el problema fue que no se expandió, sino que se redujo la ventana). ¿Esto significa que la prioridad de resistencia a la compresión no entrará en juego? ¿Debe la prioridad de Abrazar contenido en cambio también establecerse en <500, o estoy confundido? (He estado trabajando con el diseño automático durante casi un año y todavía me resulta difícil visualizar el propósito de esos 2 conjuntos de prioridades). –

+0

sí, tienes razón, la prioridad de abrazo de contenido debe ser <500 en su lugar.La prioridad de resistencia a la compresión se usa al determinar qué vista debe reducirse al reducir el espacio y al abrazar el contenido al aumentar el espacio. Con la ventana de mantener la prioridad de 500, cualquier cosa <500 significa que gana el tamaño de la ventana,> 500 gana la vista – iain

Cuestiones relacionadas