7

Ya he creado una subclase UIViewController con un grupo de controles, y me acabo de dar cuenta de que si giro el iPhone, la mitad de los controles se vuelven invisibles. Por lo tanto, me gustaría de alguna manera hacer que el UIViewController'sUIView sea desplazable para que cuando el dispositivo (o el Simulador) gira, el usuario pueda desplazarse por la vista para ver todos los controles.¿Cómo puedo modificar un UIViewController existente para permitir el desplazamiento?

Tenía la esperanza de hacer todo esto en Interface Builder. Traté de cambiar la clase de la vista de UIView a UIScrollView en el editor de Identidad de clase, pero no se desplaza nada. La clase base de mi controlador de vista es simple UIViewController<UIScrollViewDelegate>.

¿Hay una manera fácil de desplazar la vista principal en mi controlador de vista desplazable sin tener que volver a crear todo en IB?

+0

tengo el mismo problema, nadie parece saber – Maysam

Respuesta

2

Agregue UIScrollView y haga todos los controles y widgets y etiquetas de las subvistas de la vista de desplazamiento arrastrándolas desde donde estén "dentro" o "dentro" de la vista de desplazamiento. Esto los convierte en subvistas de la vista de desplazamiento, que es lo que desea.

+0

intenté esto, también. Se agregó UIScrollView, moví los controles a eso, eliminé UIView, hice mi controlador un UIScrollViwDelegate y convertí el controlador en el delegado y la vista de desplazamiento en su vista. Sin desplazamiento. – Paul

+0

¿No puedes simplemente poner la vista dentro de la vista de desplazamiento? ¿Por qué eliminar el UIView original? –

+0

¿Por qué el voto a favor? –

0

Sería de gran ayuda para entender lo que su interfaz está en pantalla, pero me gustaría sugerir uno de los siguientes:

  1. No permita la rotación mediante la devolución de NO a partir de shouldAutorotateToInterfaceOrientation
  2. Uso Interface Builder a adjust your springs and struts para que todos sus elementos de interfaz se ajusten a la vista horizontal
  3. Agregue un nuevo UIScrollView en Interface Builder y arrastre su UIView en él, luego reasigne la propiedad de vista del propietario del archivo a la vista de desplazamiento.
+0

1. Quiero rotación. 2. No hay espacio. Créeme. 3. Lo intenté. Sin desplazamiento. ¿Es un problema de delegado? – Paul

+0

¿Has intentado actualizar el contenido de UIScrollView cuando gira? –

1

que era capaz de hacer esto mediante la adición de una vista de desplazamiento a la vista de IB, haciendo que el controlador de vista de un UIScrollViewDelegate, conectando el ScrollView a un objeto UIScrollView en IB, enganchando el delegado para presentar dueño, y la adición de esta línea en el viewDidLoad:

- (void) viewDidLoad { 
     scrollView.contentSize = CGSizeMake(1280, 960); 
    } 
1

comportamiento de desplazamiento solamente se invoca si el contentSize de un UIScrollView es más grande que sus límites.

2

Esto se puede hacer de la siguiente manera:

  1. Abra el archivo de punta y crear un objeto UIScrollView debajo de su objeto UIView.
  2. mover todos sus controles en el UIScrollView
  3. abrir su archivo de cabecera (.h) y añadir una nueva propiedad para la vista de desplazamiento:

@property (no atómica, retener) IBOutlet UIScrollView * ScrollView;

  1. Abra su archivo de implementación (.m) e insertar el siguiente:

@synthesize scrollView;

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    // Enable scrolling for portrait 
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, 600); 

} 
  1. volver a tu archivo de punta y el alambre de la ScrollView el propietario del archivo a su objeto UIScrollView.

El truco real aquí es configurar el scrollView.contentSize. Una vez que esto esté configurado, el desplazamiento debería ocurrir.

Si quieres habilitar el desplazamiento para cuando el dispositivo está en orientación vertical, se puede usar esto:

// Enable scrolling for landscape orientation 
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, scrollView.frame.size.height); 

Esto debe darle una cierta marco de referencia.

Pulga

0

Añadir una barra de desplazamiento en el archivo Xib y luego arrastre & gota controles en la barra de desplazamiento. Dentro load view usar

scrollView.contentSize = CGSizeMake(CONTENT_WIDTH, CONTENT_HEIGHT); 
+0

Para mejorar la calidad de su publicación, incluya cómo/por qué este código resolverá el problema. –

5

Para las personas que están utilizando guión gráfico, esto es bastante fácil de hacer

  • en Esquema del documento seleccione la más alta View del UIViewController
  • en Identity inspecter, en la clase personalizada , para la clase ingrese UIScrollView

Eso es todo.

+0

Esta es la respuesta para Xcode 7.2 –

+0

Esto acaba de romper mi diseño. –

Cuestiones relacionadas