Saltar al contenido

Swift UIScrollView: implementación correcta solo para desplazamiento vertical

Hola, encontramos la solución a lo que necesitas, deslízate y la encontrarás más abajo.

Solución:

Mike Woelmer muestra cómo hacer esto correctamente con Interface Builder en el blog Atomic Object.

Using UIScrollView with Auto Layout in iOS

También tengo mi propio código solamente (sin implementación de guión gráfico) en github.

https://github.com/nadthevlad/AutolayotScrollview

No desea establecer la altura o el ancho de su contenido o vistas. En su lugar, desea utilizar pines y restricciones de Autolayouts para establecer cómo se comporta la vista de desplazamiento.

  1. Cree su UIScrollView *scrollView.

  2. Desea crear una UIView *contentView en la que colocará el resto de los elementos de su vista.

    [self.view addSubview:scrollView];
    [scrollView addSubview:contentView];
    [contentView addSubview:_label1];
    [contentView addSubview:_label2];
    [contentView addSubview:_label3];
    [contentView addSubview:_label4];
    [contentView addSubview:_label5];
    [contentView addSubview:_label6];
    
  3. Fije los 4 bordes de scrollView a los 4 bordes de self.view

  4. Fije los bordes superior e inferior de contentView a la parte superior e inferior de scrollView.

  5. Esta es la parte difícil. Para establecer el tamaño horizontal, desea que los bordes anterior (derecho) y posterior (izquierdo) de contentView se anclen a los bordes anterior y posterior self.view en lugar de scrollView. Aunque contenView es una vista secundaria de scrollView, sus restricciones horizontales se extenderán fuera de scrollView y se conectarán a self.view.

  6. Fije cualquier otro elemento de vista a contentView como lo haría normalmente.

El truco para permitir que un UIScrollView se desplace en una sola dirección es hacer que el tamaño del contenido del UIScrollView para la dimensión restringida sea el mismo que el tamaño del marco del UIScrollView en la misma dimensión. Entonces, en este caso, scrollview.contentSize.width debe ser igual scrollview.frame.size.width.

Con eso en mente, intente lo siguiente:

  1. Asegúrese de tener restricciones configuradas de la misma manera que se describe en esta respuesta

  2. Agregue el siguiente código a su controlador de vista:

    override func viewWillLayoutSubviews()
    
        super.viewWillLayoutSubviews();
        self.scrollView.contentSize.height = 3000; // Or whatever you want it to be.
    
    

Personalmente, no soy muy fan de Auto Layout. Si está interesado en probar esto sin Auto Layout, es decir. solo con código en lugar de restricciones: puede desactivar el diseño automático para la vista del controlador de vista y cambiar su viewWillLayoutSubviews método para verse así:

override func viewWillLayoutSubviews()

    super.viewWillLayoutSubviews();

    self.scrollView.frame = self.view.bounds; // Instead of using auto layout
    self.scrollView.contentSize.height = 3000; // Or whatever you want it to be.

Así es como siempre lo hago para desplazarme verticalmente desde el guión gráfico con restricciones:

1-arrastra un controlador de vista

2-arrastre una vista de desplazamiento en la vista principal del controlador con restricciones L=0 , T =0 , T =0 y B = 0 a su supervista (vista principal del controlador).

3-arrastre una UIVIew a la vista de desplazamiento para que funcione como su vista de contenido con restricciones L-0,T=0,T=0,B=0 a su supervista (la vista de desplazamiento)

  • bueno, aquí es el momento de configurar el tamaño del contenido de la vista de desplazamiento, que controla el desplazamiento tanto horizontal como verticalmente de la siguiente manera.

4-para detener el desplazamiento horizontal, haga que la vista de contenido tenga el mismo ancho que la vista de desplazamiento con restricción.

5-hacer que la altura de la vista del contenido sea igual a la altura de la vista del controlador, esto es temporalhasta que lo llenemos con contenido desplazable .

6-añadir controles en la vista de contenido hasta finalizar.

7-y lo más importante, elimine la restricción que hizo en el punto 5 de la vista de contenido alto y, en su lugar, haga una restricción desde el control en la parte inferior de la vista de contenido para tener una alineación inferior. Esto ayuda a hacer que la vista de contenido comience desde el primer control en la parte superior y hacia abajo hasta el último control (todo depende de este paso).

8-simplemente ejecute y los resultados deberían ser los esperados, de lo contrario, hágamelo saber.

¡Espero que esto ayude!

Al final de todo puedes encontrar las interpretaciones de otros creadores, tú igualmente tienes la libertad de dejar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *