2012-01-10 8 views
27

Tengo un desplazamiento de desplazamiento vertical: imagine una página de "Acerca de esta aplicación" de una aplicación de barra de pestañas que va 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 resto 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.Diseñando dentro de una vista de desplazamiento en xcode 4.2 con storyboards

Respuesta

39

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.

Utilice 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. panorámica: utilice la coordenada Y indica a -200, luego edite los contenidos.
  2. a poner más contenidos en la parte oculta, la sartén de nuevo para revelar nueva inmobiliaria
  3. cuando terminó, restaurar los valores de la altura de la 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.

+16

¡Buena solución a un problema que no debería existir! –

51

En el guión gráfico seleccione viewController, luego en el inspector de atributos 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.

+0

Esto parece funcionar bien hasta que intento cambiar el tamaño de la vista o la vista de desplazamiento en el guión gráfico, en cuyo punto el contenido se deforma en relación con el cambio en el tamaño de la vista ... – John

+0

Para John, En realidad, esto no es problema. Si va al "inspector de tamaño" para esa vista de desplazamiento y modifica el "tamaño automático". Borre las flechas horizontales y verticales dentro del rectángulo. (También borro las flechas "derecha" e "inferior" para que mi vista de desplazamiento pueda unirse a la esquina superior izquierda). Entonces, el tamaño de la vista de desplazamiento no debería verse afectado por el tamaño de la vista principal. –

+0

No existe el tamaño o la forma libre. –

2

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

4

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 contenido de vista de una vez sin tener que desplazarse hacia arriba o hacia abajo en IB.

+0

Creo que debe establecer el alto de la Vista de contenedor, en lugar de la altura del contenido de ScrollView. Lo que me gustaría saber es cómo configurar la altura de Vistas de contenedor al alto de la vista incrustada usando restricciones de diseño. ¿Tienes alguna idea sobre esto? –

25

Nuevo: 3/26/2013

me topé con lo que creo que es la forma aún más simple de tratar con UIScrollView directamente en el guión gráfico.

  1. No se necesita código, solo ajustes del guión gráfico. 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 las anulaciones de viewWillAppear o viewDidLoad

Aquí es lo que hice (partes importantes resaltados con **): (ver code)

  1. Crear un nuevo proyecto con guión gráfico habilitado
  2. gota en un UIScrollView , establecer clase en inspector de identidad para controlador de vista
  3. En atributos Inspector, cambie el Tamaño en métricas simuladas a Forma libre **
  4. Seleccione vista de desplazamiento; En el inspector de atributos, active "desplazamiento habilitado" y "fondo" a "Blanco" (averiguará por qué - si no lo hace)
  5. Inspector de tamaño inferior (con la vista de desplazamiento seleccionada) cambie la altura a 900 para ejemplo **
  6. Agregar botones, uno en la parte superior y otro en la parte inferior
  7. Agregue un controlador predeterminado para buttonTouchUpInside para ambos botones y simplemente Log remitente.

Consulte Code Seleccione el controlador de vista y la vista de desplazamiento y revise los inspectores.

+6

Hay mucha literatura sobre este tema, pero eres la primera persona con la que me he encontrado que realmente responde la maldita pregunta. FREEFORM es lo que lo soluciona. Pasé muchísimo tiempo tratando de resolver esto, ¡gracias por compartir! –

+3

forma libre del controlador de vista? – coolcool1994

0

He estado luchando con esto por un tiempo, y cada cosa que he probado 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 muchos resultados variados, incluso de vez en cuando hacerlo funcionar correctamente. La mayoría de las veces lo veo exactamente correcto, pero sin desplazamiento.

En fin, descargué el código de Dickey Singh, que funcionaba perfectamente pero 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 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 Auto Layout, la configuración de "contentSize" en "Atributos de tiempo de ejecución definidas 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 los límites del marco horizontal o vertical, 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 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 pero con ellos.

0

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 revisar el guión gráfico, descubrí que también necesitamos agregar Restricciones de diseño automático para el controlador de vista que posee el 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 manera 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 :-)

10

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.

+1

cambiaste mi vida, gracias: D –

+0

Esta debería ser la respuesta aceptada .. solución mucho más elegante – Ciprian

Cuestiones relacionadas