software sketch programa para interfaces graficas diseño diseñar macos cocoa interface-builder autolayout nsscrollview

macos - programa - sketch diseño de interfaces



Habilitación de NSScrollView para desplazar sus contenidos utilizando Diseño automático en el Creador de interfaces (1)

Aquí está el enfoque general:

  • Haga que la vista del documento sea al menos tan alta como la vista del clip. O, de forma equivalente, hacer que la vista del clip no sea más alta que la vista del documento.
  • Permita que la vista del documento crezca en altura, pero no se reduzca más de lo que requieren sus subvistas.
  • Evite la ambigüedad en la vista del documento al tener una restricción de baja prioridad para que sea lo más pequeño posible dado el resto de las restricciones.

Entonces, por ejemplo, debería haber una restricción entre la parte inferior de la vista de clip y la parte inferior de la vista de documento, pero debería ser una desigualdad: Superview.Bottom <= Document View.Bottom. (O, de forma equivalente, Document View.Bottom> = Superview.Bottom).

Dentro de la vista del documento, probablemente tenga algún campo de texto o algo en la parte inferior y una restricción entre eso y la parte inferior de la vista del documento. Establezca esa restricción en una desigualdad: Superview.Bottom> = Text Field.Bottom + spacing estándar.

Eso causará ambigüedad en cuanto a la altura de la vista del documento. Podría ser de cualquier tamaño lo suficientemente alto como para adaptarse a todas sus subvistas. Agregue una restricción de altura. Establezca su prioridad en 51 y su constante en 0. Es decir, quiere que la vista tenga 0 de altura, pero con prioridad muy baja, por lo que casi cualquier otra cosa la reemplazará. Pero resuelve la ambigüedad.

Si desea permitir el desplazamiento horizontal, debe hacer lo mismo general en la orientación horizontal.

Actualizar:

Hay otro enfoque. Configure las restricciones dentro de la vista del documento para darle un tamaño estricto (sin desigualdades). Suele ser una cadena de restricciones desde su subvista superior a la superior, desde la parte inferior de la subvista hasta la parte superior de otra subvista, etc., y desde la parte inferior de la subvista inferior hasta la parte inferior de la vista del documento. Lo mismo para llevar al final.

Entonces, las únicas restricciones necesarias entre la vista de clip y la vista de documento son las restricciones principales y principales.

Si prueba en esta configuración, podrá cambiar el tamaño y la vista de desplazamiento se desplazará. Entonces, eso está bien. Sin embargo, cuando el área de contenido de la vista de desplazamiento es más alta que la vista del documento, la vista del documento se fijará en la parte inferior del área de contenido. Por lo general, lo quieres inmovilizado en la parte superior en esa situación.

La razón es que la vista de clip no está volteada. Además, está ajustando sus límites para que coincida con la vista del documento. Por lo tanto, aunque hay una restricción para mantener la vista del documento anclada en la parte superior de la vista del clip, la parte superior de la vista del clip no está donde usted espera que esté. La vista de clip pone la vista del documento en (0, 0), que está en la parte inferior.

Entonces, la última pieza es crear una subclase de NSClipView que anule -isFlipped para devolver YES . Luego, configure la clase de la vista de clip en el NIB en su subclase. Después de eso, funcionará como quieras.

Implementé una NSView personalizada que contiene muchos NSTextField y otros NSView . Luego incrustó esa vista personalizada en una vista de desplazamiento usando Editor> Incrustar> Vista de desplazamiento. Esto crea la jerarquía adecuada como visible en el esquema, pero necesitaba agregar restricciones de diseño automático para especificar dónde esta vista de desplazamiento debe colocarse dentro de la vista (arriba, abajo, adelante, atrás). Además, tuve que agregar restricciones para la vista personalizada, establecer contra la vista de clip, para diseñar los elementos en la ubicación correcta. Esto funciona bien, cuando ejecuto la aplicación, todos los elementos aparecen correctamente y la vista rebota en desplazamiento. Sin embargo, cuando reduzco la altura de la vista principal para que no quepan todos los elementos en la pantalla, aparecen advertencias de diseño automático y cuando actualizo los marcos aumenta la altura de la vista nuevamente. Para solucionarlo, tuve que quitar la restricción inferior de la vista de desplazamiento a la vista principal. Ahora cuando ejecuto la aplicación, la ventana está configurada en el tamaño correcto, pero no puedo desplazarme por la vista personalizada para llegar al final del contenido; está restringida para que no se desplace, además del efecto de rebote elástico porque usted '' re al límite del borde. Entonces mi pregunta es, ¿qué debo hacer para permitir que esta vista de desplazamiento se desplace cuando estoy diseñando todos los elementos en un XIB y usando el diseño automático?