2009-10-05 17 views
20

Tengo todos mis controles establecidos en el constructor de interfaces (muchas etiquetas, botones, etc.). ¿Cómo los coloco a todos en una vista de desplazamiento en el constructor de interfaz para poder tener más espacio y poder desplazarme hacia arriba y hacia abajo para revelar más controles? ¿Tengo que hacer esto programáticamente?¿Cómo agregar UIScrollView al constructor de interfaz?

Respuesta

30

Abra la vista que tiene todos los controles y etiquetas, etc. (en Interface Builder). Seleccionar todo. Luego, en el menú Editor, selecciona Insertar en, luego, Vista de desplazamiento.

Nota: en versiones anteriores de Xcode, esto se encuentra en el menú Diseño, luego Incrustar objetos en ... (vista de desplazamiento).

+0

Marc W se me adelantó. – mahboudz

+2

esto no funciona como se esperaba. Todo está bajo UIScrollView ahora, pero cuando cargo la aplicación, no se puede desplazar nada. ¿Por qué? – erotsppa

+10

En IB, asegúrese de que la vista de desplazamiento sea lo suficientemente pequeña para que todo quede visible en la vista cuando se ejecuta su aplicación. En otras palabras, sus límites/cuadro deben ser más pequeños o iguales a la vista en la que reside. Luego, en su aplicación, necesita establecer el scrollview.contentSize = tamaño de la vista con todos los botones, etiquetas, etc. Esto será más grande que el marco/límites que establezca para la vista de desplazamiento. Si todo se hace bien, entonces debería ser capaz de desplazarse sin otro trabajo de su parte. – mahboudz

3

Seleccione todos los objetos que desea poner en una vista de desplazamiento y vaya al menú Diseño, elija "Incrustar objetos en" y elija "Vista de desplazamiento".

25

Mi solución preferida, en la que no es necesario codificar el tamaño de la contentSize:


Nota: es posible que pueda para evitar las partes de código fuente de esta utilizando el truco aquí : https://stackoverflow.com/a/11239123/153422 - aunque todavía no lo he probado.

El resto de este truco ... que todavía tienen que utilizar de todos modos


  1. mover todos los controles en una sola UIView (en IB: seleccionar todo, y luego ir Diseño> En incrustar objetos. ..> Ver)

  2. Conexión para ese único UIView a su código fuente utilizando una propiedad IBOutlet (ver más abajo)

  3. en el código fuente, NO Interface Builder (IB es roto aquí, tiene errores donde establece el origen de UIScrollView incorrectamente - intenta centrar la vista. Apple nunca se molestó en comprobar si tenía errores básicos, suspiro): Mueva el UIView único a UIScrollView (vea el código a continuación).

  4. Use sizeThatFits para "automáticamente" establecer el tamaño correcto.

Código (StackOverflow no me deja poner código dentro de una lista numerada suspiro.)

Archivo de cabecera:

/** outlet that you hook up to the view created in step 1 */ 
@property(nonatomic, retain) IBOutlet UIView *masterView; 

archivo de clase:

/** inside your viewDidLoad method */ 
[scrollview addSubview: masterView]; // step 3 
scrollView.contentSize = [masterView sizeThatFits:CGSizeZero]; // step 4 

.. .Aunque no lo he comprobado recientemente, IIRC funciona tanto en 2.xy 3.x

+0

Esta solución funciona genial. Gracias por publicar – JoshHighland

+0

Esto también funciona bien en 4.x - Todavía lo estoy usando en aplicaciones, sin problemas. – Adam

+0

esto funciona en iOS 4.2 en el iPhone. no olvide que UIScrollView height debe ser igual o igual al nivel superior de UIView para ViewController. He estado jugueteando con la configuración y olvidé cambiar esto de nuevo. Me confundí porque parecía rebotar en la posición incorrecta. –

4

Es fácil:

Primero agregue una vista de desplazamiento a su vista. Cambia el tamaño de la vista de desplazamiento (por ejemplo, hazla 700 píxeles de largo). Comience a poner sus controles Cuando quiera poner/editar controles en la parte inferior (invisible), seleccione la vista de desplazamiento y cambie la posición de inicio Y a -300. Voila. Después de la edición, establezca la posición Y-start en 0 o lo que sea.

+0

Como alternativa, puede aumentar el tamaño y luego disminuirlo nuevamente.El desplazamiento sería bueno, pero no me sorprende que no esté implementado – Casebash

+0

Si lo hace, también debe (re) configurar manualmente el tamaño de "marco" de la vista de desplazamiento al tamaño de la vista de la página (el portal de visualización) Y configura el "tamaño de contenido" para el tamaño total del contenido. La última opción predeterminada es 0,0 y si contentSize no es más grande que frame.size, no se producirá desplazamiento. Es una buena estrategia adicional junto con las otras dos, ¡así que gracias! –

1

Aunque esta pregunta es muy viejo, voy a sugerir una solución alternativa que se encuentran, ya que tenía el mismo problema y no era capaz de encontrar mucha ayuda por ahí:

Cuando en el IB, si desea colocar objetos fuera de los 420 píxeles, solo asegúrese de haber seleccionado No especificado para todas las barras de estado, superior e inferior para la vista que contiene la vista de desplazamiento con todos los objetos. De esta manera, podrá cambiar el tamaño manualmente de la pantalla (para la Vista). Luego, puede seguir el consejo de Ximonn sobre el cambio de tamaño del valor H para la Vista de desplazamiento, tener acceso a todos los demás objetos, trabajar con ellos y luego, deshacer los cambios para H y luego establecer las Barras necesarias.

0

He estado buscando esto por unos días, y finalmente encontré este sitio con una solución que funcionó para mí.

Scrolling with UIScrollView

Básicamente, usted tiene su vista principal con un objeto UIScrollView en ella. Luego otra vista de contenido con todo su contenido en ella. Luego agrega la vista de contenido a la vista de desplazamiento. Y, finalmente, establezca el tamaño del tamaño del contenido de la vista de desplazamiento al tamaño de la vista de contenido.

1

Algo importante. Para desplazarse por la subvista grande (UIImageView, por ejemplo) en UIScrollView recuerde, para esta subvista, desmarque la casilla de verificación "Interacción del usuario habilitada" en InterfaceBuilder -> Ventana de visualización. O hazlo programáticamente.

subview.userInteractionEnabled = NO; 

De lo contrario, esta subvista se acumulará en la pantalla sin ningún efecto.

0

Lo sé, este hilo es un poco más antiguo ... Pero alguien podría encontrarlo en Google, está en el ranking. escribí este pequeño método de ayuda para conseguir el trabajo hecho:

- (void)addSubview:(UIView *)theSubView toScrollView:(UIScrollView *)theScrollView 
{ 
    [theScrollView addSubview:theSubView]; 
    theScrollView.contentSize = theSubView.bounds.size; 
} 

sólo hay que declarar dos de IBOutlet en la cabecera (por ejemplo contentView y scrollView) y llamar al método como este, dondequiera que usted quiere cargar un UIView en un UIScrollView con su código fuente:

[self addSubview:contentView toScrollView:scrollView];

lo llamé en viewDidLoad

Este método características iOS

4

No sé si soy solo yo, pero traté de seguir las instrucciones en cada una de las otras respuestas aquí y ninguna de ellas funcionó. Ninguna de las respuestas incluía todo lo necesario, cada una supongo que asumimos que sabemos hacer algo y dejamos esa parte. Finalmente lo he descubierto con la ayuda de red artisan. Así que ... estoy enumerando aquí todos los pasos necesarios para conseguir que esto funcione:

  1. En InterfaceBuilder, agregar la vista y luego añadir sus controles a ella (o si sus controles ya existen en la vista principal, puede seleccionar todos sus controles y luego ir a Editor | Incrustar en | Ver, luego arrastrar esa nueva Vista para que quede solo fuera de la vista principal). Esta vista puede ser del tamaño que desee.

  2. En InterfaceBuilder, agregue una Vista de desplazamiento a su vista principal y su tamaño para abarcar toda la vista principal.

  3. Agregue el código que figura a continuación a sus archivos UIViewController Header y Class.

  4. En InterfaceBuilder, conecte la Vista que contiene sus controles a 'contentView' en el Propietario del Archivo. Conecte la vista de desplazamiento a 'scrollView' en el propietario del archivo.

del encabezado del archivo:

 
    @interface MyViewController : UIViewController 
    @property(nonatomic, retain) IBOutlet UIScrollView *scrollView; 
    @property(nonatomic, retain) IBOutlet UIView *contentView; 

Clase del archivo:

 
    @synthesize scrollView, contentView; 

    - (void)viewDidLoad 
    { 
     [super viewDidLoad];  
     [self.scrollView addSubview:self.contentView]; 
     self.scrollView.contentSize = self.contentView.bounds.size; 
    } 

    - (void)viewDidUnload 
    { 
     self.scrollView = nil; 
     self.contentView = nil; 
     [super viewDidUnload]; 
    } 
0

La respuesta seleccionada funciona bien para Xcode 3.

Sin embargo, para Xcode 4, los menús han sido re arreglado ligeramente

para hacer lo mismo en Xcode 4 seleccione sus puntos de vista a continuación, utilizar:

Editor> Insertar En> Scroll Ver

Cuestiones relacionadas