Diseñar dentro de una vista de desplazamiento en xcode 4.2 con guiones gráficos

Tengo una vista de desplazamiento vertical: imagine una página de “Acerca de esta aplicación” de una aplicación de barra de tabs que avanza un poco y requiere una vista de desplazamiento. Solo contiene unas pocas imágenes, un video y algo de texto (solo el video ha sido codificado; el rest se ha colocado en la GUI). En el guión gráfico (¿Interface Builder?) De Xcode 4.2, todo está configurado como debería ser y funciona bien, pero la vista solo es tan grande como lo que se ve en la pantalla, ¿no es posible organizar manualmente en el guión gráfico los elementos que están inicialmente fuera de la pantalla – que necesita para desplazarse hacia arriba? La única forma que he encontrado hasta ahora es diseñarlos en la vista visible y luego navegarlos hacia abajo con las teclas de flecha.

Siento tu dolor. La única forma que encontré es desplazar manualmente la vista de desplazamiento en el inspector de tamaño para revelar la parte de la vista que desea editar visualmente.

Use una UIView para contener elementos para que estén posicionados con relación a esta vista. Agregue la vista como una subvista a la vista de desplazamiento en 0,0.

  1. pan: use la coordenada Y, digamos a -200, luego edite los contenidos.
  2. para colocar más contenidos en la parte oculta, vuelva a panoramizar para revelar nuevos bienes inmuebles
  3. Cuando termine, restaure los valores de la altura de ScrollView y la posición X, Y.

Asegúrese de que el rectángulo del marco de vista de desplazamiento sea más pequeño que la vista contenida.

En el guión gráfico, seleccione viewController, luego en Attributes inspector cambie ‘size’ a ‘freeform’. Luego, cambie la “altura” de la vista / vista de desplazamiento a la que necesite. La configuración predeterminada de puntales y muelles debe tener en cuenta el tamaño correcto de la vista cuando se ejecuta la aplicación, pero debe verificarla dos veces.

Nuevo: 26/03/2013

Me encontré con lo que creo que es una forma aún más simple de lidiar con UIScrollView directamente en el guión gráfico.

  1. No se necesita código, solo configuraciones de guiones gráficos. Esto tal vez sea nuevo en iOS6.1 / Xcode 4.6
  2. No es necesario deshabilitar las restricciones (es decir, desmarque “Usar ajuste automático” en el Inspector de archivos para el archivo del guión gráfico)
  3. No es necesario agregar UIScrollView * scrollView; en .h
  4. No es necesario agregar self.scrollView.contentSize = … en reemplazos de viewWillAppear o viewDidLoad

Esto es lo que hice (partes importantes resaltadas con **): (ver código )

  1. Crear un nuevo proyecto con el guión gráfico habilitado
  2. Coloque un UIScrollView, configure la clase en el inspector de identidad para el controlador de vista
  3. En el Inspector de atributos, cambie el Tamaño en métricas simuladas a Freeform **
  4. Seleccione la vista de desplazamiento; En el inspector de atributos, activa “desplazamiento habilitado” y “fondo” a “blanco” (averiguarás por qué, si no lo haces)
  5. En Size Inspector (con la vista de desplazamiento seleccionada) cambie la altura a 900, por ejemplo **
  6. Agregar botones, uno en la parte superior y uno en la parte inferior
  7. Agregue un controlador predeterminado para buttonTouchUpInside para ambos botones y simplemente Log remitente.

Ver Código Seleccione el Controlador de Vista y la vista de desplazamiento y revise los inspectores.

Simplemente cambie el ‘Tamaño simulado’ del controlador de vista para obtener una forma libre y establezca una altura que sea mayor que el tamaño habitual, podrá ver todas las tomas que necesita editar.

En iOS 6.0 puede arrastrar una Vista de contenedor dentro de su Vista de desplazamiento. Esto creará automáticamente una nueva Vista para su contenido, fuera de la escena actual. A continuación, puede cambiar el tamaño de esta vista para adaptarla a su contenido.

Creo que todavía tendría que establecer la altura del contenido de ScrollView en tiempo de ejecución, pero al menos puede diseñar su vista de contenido de una vez sin tener que desplazarse hacia arriba o hacia abajo en IB.

Solo desmarque las “Subvistas de Autoresize” de cualquier vista que intente redimensionar y evitará que todos sus objetos cambien de tamaño.

He estado luchando con esto por un tiempo, y cada cosa que he probado ha fallado.

Específicamente, lo que bash lograr es un diálogo modal de tamaño libre con una vista desplazable que contiene un contenedor para otra vista. He tenido muchos resultados variados, incluso de vez en cuando hacerlo funcionar correctamente. La mayoría de las veces lo veo exactamente correcto, pero sin desplazamiento.

Finalmente, descargué el código de Dickey Singh, que funcionó a la perfección pero que no tenía nada de especial. (Excelente solución limpia por cierto). Entonces, agregué una vista de contenedor, exactamente como lo tenía en mi código, ¡y se rompió!

Después de experimentar, resolví lo que está sucediendo. Se paciente conmigo.

1) Usando el diseño automático, el tamaño de la vista de desplazamiento parece dictar cuáles serán los límites de desplazamiento. Configurar “contentSize” en “Atributos de tiempo de ejecución definidos por el usuario” parece no tener ningún efecto en esto, y tampoco lo hace al configurar “contentSize” o “bounds” en “viewWillDisplay” o “viewDidLoad”. Por lo tanto, si el tamaño inicial de la vista de desplazamiento es 800×800, ese será todo el espacio que se puede mostrar. Por esta razón, cuando quiero una región desplazable, creo una vista de contenedor y luego pongo la vista de desplazamiento dentro del contenido.

2) Sin diseño automático, la configuración de “contentSize” en “Atributos de tiempo de ejecución definidos por el usuario” funciona, al igual que si se establece programáticamente en “viewDidLoad”. Prefiero usar “Atributos de tiempo de ejecución definidos por el usuario” porque mantiene el tamaño con el diseño. Esta solución le permite usar la vista de desplazamiento con más flexibilidad, ya que puede ser de cualquier tamaño en el momento del diseño.

3) Independientemente del diseño automático, si cualquier vista dentro de la región de desplazamiento coincide exactamente con CUALQUIER límite horizontal o vertical, entonces la vista de desplazamiento deja de funcionar como una vista de desplazamiento. Esto se aplica a mi propio código y al código de Dickey Singh en todas las configuraciones posibles que he probado.

No tengo idea de qué está causando (3), pero claramente es un error.

Espero que esto ayude a todos los que están luchando por usar la vista de desplazamiento. Me imagino que algunas personas los están usando sin ningún problema, y ​​algunos (como yo) han tenido problemas pero con ellos.

Aquí está mi solución para diseñar un ScrollView con un contenido más grande que la pantalla enteramente en Storyboard (bueno, excepto por 1 sola línea de código :-):

https://stackoverflow.com/a/19476991/1869369

Actualmente estoy desarrollando una aplicación para iOS 7, e hice exactamente como la respuesta de @Dickey Singh, pero al principio no funciona. Después de consultar el guión gráfico, descubrí que también necesitamos agregar Restricciones de diseño automático para el controlador de vista que tiene scrollView. Parece que tales restricciones de diseño automático se agregarían automáticamente antes de Xcode 5, pero ahora tenemos que hacerlo nosotros mismos. La forma de agregar restricciones: Primero, seleccione el controlador de vista en el guión gráfico; Ingrese ‘Editor’ en el menú superior; Seleccione ‘Resolver problemas de diseño automático’; Seleccione ‘Agregar restricciones faltantes en el contenedor’. Hecho 🙂