[iphone] UIScrollView no se desplaza



Answers

Si no puede desplazarse por la vista incluso después de configurar contentSize correctamente, asegúrese de desmarcar "Usar AutoLayout" en Interface Builder -> File Inspector.

Question

Tengo un UIScrollView que contiene muchos UIImageView , UILabels, etc ... las etiquetas son mucho más largas que UIScrollView , pero cuando ejecuto la aplicación, no puedo hacer clic y desplazarme hacia abajo ...

¿Por qué podría ser esto?

Gracias




En mi caso, tuve que establecer que los delaysContentTouches verdaderos porque los objetos dentro de scrollView capturaban los eventos táctiles y se manejaban solos en vez de dejar que el scrollView lo manejara.




Asegúrese de tener la propiedad contentSize de la vista de desplazamiento establecida en el tamaño correcto (es decir, una que sea lo suficientemente grande como para abarcar todo su contenido).




Establezca la propiedad contentSize de Scrollview en el método viewDidLayoutSubviews . Algo como esto

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        scrollView.contentSize = CGSizeMake(view.frame.size.width, view.frame.size.height)
}



Encontré eso con este problema de AutoLayout ... si solo hago que ViewController use UIView en lugar de UIScrollView para la clase ... entonces simplemente agregue un UIScrollView yo mismo ... que funciona.




Una pequeña adición, todas las anteriores son las razones por las que su vista de desplazamiento puede no desplazarse, pero a veces esto podría ser el motivo especialmente cuando se agrega scrollview a través del código y no IB, puede haber agregado sus subvistas a la vista principal y no a la vista de desplazamiento hace que la subvista no se desplace

y mantenga el tamaño del contenido establecido y más grande que el marco de vista principal (¡¡¡duhh !!)




La respuesta anterior es correcta: para que se produzca el desplazamiento, es necesario establecer el tamaño del contenido.

Si está utilizando el constructor de interfaces, una forma clara de hacerlo es con los atributos de tiempo de ejecución definidos por el usuario. P.ej:




Gran parte del tiempo el código es correcto si ha seguido un tutorial, pero lo que muchos principiantes no saben es que scrollView NO se desplazará normalmente a través del simulador. Se supone que debe desplazarse solo cuando presiona hacia abajo en el mousepad y se desplaza simultáneamente. Muchos usuarios experimentados de XCode / Swift / Obj-C están acostumbrados a hacer esto y no saben cómo los principiantes podrían pasar por alto. Ciao :-)

@IBOutlet weak var scrollView: UIScrollView!
override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(scrollView)
    // Do any additional setup after the view
}

override func viewWillLayoutSubviews(){
    super.viewWillLayoutSubviews()
    scrollView.contentSize = CGSize(width: 375, height: 800)
}

Este código funcionará perfectamente bien siempre y cuando hagas lo que dije arriba




Si su scrollView es una subvista de un containerView de algún tipo, asegúrese de que su scrollView esté dentro del marco o los límites de containerView . Tenía containerView.clipsToBounds = NO que todavía me permitía ver el scrollView, pero como scrollView no estaba dentro de los límites de containerView , no detectaría eventos táctiles.

Por ejemplo:

containerView.frame = CGRectMake(0, 0, 200, 200);
scrollView.frame = CGRectMake(0, 200, 200, 200);
[containerView addSubview:scrollView];
scrollView.userInteractionEnabled = YES;

Podrá ver scrollView pero no recibirá interacciones del usuario.




agregando el siguiente código en viewDidLayoutSubviews funcionó para mí con Autolayout. Después de probar todas las respuestas:

- (void)viewDidLayoutSubviews
{
    self.activationScrollView.contentSize = CGSizeMake(IPHONE_SCREEN_WIDTH, 620);

}

//set the height of content size as required



Related