tiene saber mensaje eliminar como iphone uiscrollview ipad

iphone - saber - UIScrollView no se desplaza



virus iphone 5 (20)

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); }

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


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;


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).


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.


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.


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.


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) }


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


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.


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 :)


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:


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

Medio ambiente: xCode 5.0.2 Storyboards ios7


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.


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ó


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.


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 .


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 !!)


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


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 ); }


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.