Diseñando dentro de un scrollview en xcode 4.2 con storyboards


Tengo un uiscrollview de desplazamiento vertical: imagine una página 'acerca de esta aplicación' de una aplicación de barra de pestañas que continúa un poco y requiere un scrollview. Solo contiene unas pocas imágenes, un video y algo de texto (solo el video ha sido codificado - el resto se ha colocado en la GUI). En storyboard (Constructor de interfaz?) Xcode 4.2, todo está configurado como debe ser y funciona bien, pero la vista es solo tan grande como lo que ve en la pantalla, ¿no es posible organizar manualmente en storyboard la elementos que están inicialmente fuera de la pantalla - que necesita para desplazarse hacia arriba? La única manera que he encontrado hasta ahora es diseñarlos en la vista visible y luego navegarlos hacia abajo con las teclas de flecha..

Author: John, 2012-01-11

9 answers

Siento tu dolor. La única manera 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 de modo que se posicionen relativamente a esta vista. Agregue la vista como una subvista a la vista de desplazamiento en 0,0.

  1. pan: use la coordenada Y decir a -200, luego edite el contenido.
  2. para colocar más contenido en la parte oculta, pan de nuevo para revelar nuevos bienes raíces
  3. cuando terminado, restaure los valores de la altura de la vista de desplazamiento y la posición X,Y.

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

 39
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-06 01:31:59

En el storyboard seleccione el ViewController, luego en el inspector de atributos cambie 'size' a 'freeform'. Luego cambie la 'altura' de la vista/vista de desplazamiento a tan grande como necesite. La configuración predeterminada de los puntales y resortes debe encargarse de cambiar el tamaño de la vista correctamente cuando se ejecuta la aplicación, pero debe verificar dos veces.

 51
Author: agilityvision,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-11 03:48:48

Nuevo: 26/3/2013

Me topé con lo que creo que es una forma aún más simple de lidiar con UIScrollView directamente en storyboard.

  1. No se necesita código, solo configuración del guion gráfico. Esto puede ser nuevo en iOS6. 1 / Xcode 4.6
  2. No es necesario deshabilitar las restricciones (es decir, desmarcar "Usar diseño automático" en el Inspector de archivos para el archivo de guion gráfico)
  3. No es necesario agregar UIScrollView* ScrollView; in .h
  4. No hay necesidad de añadir uno mismo.ScrollView.contentSize = ... en anulaciones de viewWillAppear o viewDidLoad

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

  1. Crear un nuevo proyecto con storyboard habilitado
  2. Coloque en un UIScrollView, establezca 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, active "scroll enabled "y" background "en" White " (descubrirá por qué , si no)
  5. En el Inspector de tamaño (con la vista de desplazamiento seleccionada) cambie la altura a 900 por ejemplo * *
  6. Añadir botones, uno en la parte superior y otro en la parte inferior
  7. Agregue un controlador predeterminado para buttonTouchUpInside para ambos botones y simplemente registre el remitente.

Ver Código Seleccione el Controlador de vista y desplácese por la vista y compruebe los inspectores.

 25
Author: Dickey Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-21 05:05:03

Simplemente cambie el 'Tamaño simulado' del controlador de vista a freeform y establezca una altura que sea mayor que el tamaño habitual, podrá ver todas las salidas que necesita editar.

 10
Author: TechSeeko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-28 11:17:07

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

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

 4
Author: Eneko Alonso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-07 18:23:33

Simplemente desmarque "Autoresize subviews" de cualquier vista que esté tratando de redimensionar y debería evitar que todos sus objetos redimensionen con ella.

 2
Author: CDixon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-13 20:51:57

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

Específicamente, lo que estoy tratando de lograr es un diálogo modal de tamaño libre con una vista desplazable que contiene un contenedor para otra vista. He tenido un montón de resultados variados, incluyendo de vez en cuando que funciona correctamente. La mayoría de las veces lo veo exactamente correcto, pero sin desplazamiento.

En finalmente descargado el código de Dickey Singh, que funcionó perfectamente, pero había nada especial. (Excelente solución limpia por cierto). Por lo tanto, he añadido una vista de contenedor a la misma, exactamente como tenía en mi código, y se rompió!

Después de experimentar un poco, averigüé qué está pasando. Ten paciencia 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. La configuración de "contentSize " en" USer Defined Runtime Attributes "parece no tener ningún efecto en esto, y tampoco lo hace la configuración de "contentSize" o "bounds " en" viewWillDisplay " o "viewDidLoad". Por lo tanto, si el tamaño inicial de la vista de desplazamiento es 800x800, 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, establecer "contentSize" en "Atributos de tiempo de ejecución definidos por el usuario" funciona, al igual que configurarlo mediante programación en "viewDidLoad". Prefiero usar "User Defined Runtime Attributes" porque mantiene el tamaño con el diseño. Esta solución le permite utilizar 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 alguna vista dentro de la región de desplazamiento coincide exactamente con los límites del marco 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 lo que está causando (3), pero es claramente 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 con ellos.

 0
Author: Owen Godfrey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-03 12:57:47

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

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

 0
Author: Ronny Webers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:12

Actualmente estoy desarrollando una aplicación para iOS 7, y lo hice exactamente como la respuesta de @Dickey Singh, pero no funciona al principio. Después de verificar el guion gráfico, descubrí que también necesitamos agregar restricciones de Diseño automático para el controlador de vista que tiene la vista de desplazamiento. 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 guion gráfico; Ingrese 'Editor' en el menú superior; Seleccione el 'Resolver Problemas de Diseño Automático'; Seleccione el 'Agregar Restricciones Faltantes En el Contenedor'. Hecho :-)

 0
Author: Kun Hu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-02 17:15:37