iphone virus - UIScrollView no se desplaza




10 Answers

Siempre es bueno mostrar un fragmento de código de trabajo completo:

// in viewDidLoad (if using Autolayout check note below):

UIScrollView *myScrollView;
UIView *contentView;
// scrollview won't scroll unless content size explicitly set

[myScrollView addSubview:contentView];//if the contentView is not already inside your scrollview in your xib/StoryBoard doc

myScrollView.contentSize = contentView.frame.size; //sets ScrollView content size

Swift 4.0

let myScrollView
let contentView

// scrollview won't scroll unless content size explicitly set

myScrollView.addSubview(contentView)//if the contentView is not already inside your scrollview in your xib/StoryBoard doc

myScrollView.contentSize = contentView.frame.size //sets ScrollView content size

No he encontrado una forma de configurar contentSize en IB (a partir de Xcode 5.0) .

Nota: si está utilizando el diseño automático, el mejor lugar para colocar este código es dentro del método -(void)viewDidLayoutSubviews .

en como

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




contentSize configurar la propiedad contentSize de la vista de desplazamiento para que se desplace correctamente.

Si está utilizando el diseño automático, debe configurar viewDidLayoutSubviews en viewDidLayoutSubviews para que se aplique después de que finalice el diseño automático.

El código podría verse así:

-(void)viewDidLayoutSubviews
{
    // The scrollview needs to know the content size for it to work correctly
    self.scrollView.contentSize = CGSizeMake(
        self.scrollContent.frame.size.width,
        self.scrollContent.frame.size.height + 300
    );
}



Intenta redimensionar el tamaño del contenido a números enormes. No pude entender por qué mi vista de desplazamiento no se desplaza, incluso cuando su tamaño de contenido parece ser más grande que el tamaño de control. Descubrí que si el tamaño del contenido es menor que el necesario, tampoco funciona.

self.scrollView.contentSize = CGSizeMake(2000, 2000);

En lugar de 2000 puedes poner tus propios números grandes. Y si funciona, significa que su tamaño de contenido no es lo suficientemente grande cuando cambia el tamaño.

El delegado no es necesario para que la vista de desplazamiento funcione.




Quitar la marca de 'Usar Autodiseño' fue el truco para mí.

Medio ambiente: xCode 5.0.2 Storyboards ios7




La idea de por qué la vista de desplazamiento no se desplaza porque configura el tamaño de contenido para desplazarse por debajo del tamaño de la vista de desplazamiento, lo cual es incorrecto. Debe configurar el tamaño del contenido más grande que el tamaño de su vista de desplazamiento para navegar a través de él mientras se desplaza.

La misma idea con el zoom, establece el valor mínimo y máximo para el zoom que se aplicará a través de la acción de zoom.

Bienvenido :)




Si recibe un mensaje (IOS8 / swift) de que viewDidLayoutSubviews no existe, use lo siguiente en su lugar

override func viewDidAppear(animated: Bool)

Esto me lo arregló




Algo que no fue mencionado antes!

¡Asegúrese de que su toma esté correctamente conectada a scrollView! Debería tener un círculo relleno, pero incluso si ha completado el círculo, es posible que scrollView no se haya conectado, así que ¡vuelva a verificarlo! Desplácese sobre el círculo y vea si la vista de desplazamiento real se resalta. (Este fue un caso para mí)

//Connect below well to the scrollView in the storyBoard
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;



Si ninguna de las otras soluciones funciona para usted, compruebe que su vista de desplazamiento en realidad es un UIScrollView en Interface Builder.

En algún momento de los últimos días, mi UIScrollView cambió espontáneamente el tipo a UIView , a pesar de que su clase decía UIScrollView en el inspector. Estoy usando Xcode 5.1 (5B130a) .

Puede crear una nueva vista de desplazamiento y copiar las medidas, configuraciones y restricciones de la vista anterior, o puede cambiar manualmente su vista a UIScrollView en el archivo xib . Hice una comparación y encontré las siguientes diferencias:

Original:

<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" directionalLockEnabled="YES" bounces="NO" pagingEnabled="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Wsk-WB-LMH">
...
</scrollView>

Después del tipo cambió espontáneamente:

<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" customClass="UIScrollView" id="qRn-TP-cXd">
...
</view>

Así que reemplacé la línea <view> con mi línea original <scrollView> .

También reemplacé la etiqueta de cierre de la vista </view> con </scrollView> .

Asegúrese de mantener la identificación igual que la vista actual, en este caso: id = "qRn-TP-cXd".

También tuve que eliminar el xib de la memoria caché de Xcode al eliminar los datos derivados de la aplicación:

  • Xcode->Window->Organizer->Projects , elija su proyecto, en la línea Datos derivados, haga clic en Eliminar ...

O si usa un dispositivo:

  • Xcode->Window->Organizer->Device , elija su dispositivo-> Aplicaciones, elija su aplicación, haga clic en (-)

Ahora limpie el proyecto y elimine la aplicación del simulador / dispositivo:

  • Xcode->Product->Clean
  • Simulator/device->press app->click presionada la app->click (X) para eliminarla

Debería poder construir y ejecutar su aplicación y tener la funcionalidad de desplazamiento de nuevo.

PD: No tuve que configurar el tamaño del contenido de la vista de desplazamiento en viewDidLayoutSubviews o desactivar el diseño automático, sino YMMV.




Agregue el UIScrollViewDelegate y agregue el siguiente código al método viewDidAppear para solucionarlo.

@interface testScrollViewController () <UIScrollViewDelegate>

-(void)viewDidAppear:(BOOL)animated {
self.scrollView.delegate = self;
self.scrollView.scrollEnabled = YES;
self.scrollView.contentSize = CGSizeMake(375, 800);
}



Después de fallar con las respuestas proporcionadas en este hilo, me encontré con este artículo con la solución.

Hay dos cosas que no son intuitivas sobre la configuración de la vista de desplazamiento con el diseño automático:

  1. Las restricciones que configura como margen entre la vista de contenido y la vista de desplazamiento no influyen en el tamaño de la vista de contenido. Realmente son márgenes. Y para que funcione, la vista de contenido debe tener un tamaño fijo.
  2. El truco para el tamaño fijo es que puede establecer el ancho de la vista de contenido igual al de la matriz de desplazamiento. Simplemente seleccione ambas vistas en el árbol de la izquierda y agregue la restricción de anchos iguales.

Esta es la esencia de ese artículo. Para una explicación completa, incluidas las ilustraciones, compruébalo.




Related