Tengo un UIView
trampolín como el del iPhone. Lo he creado usando un UIScrollView
y UIButtons
. Quiero deshabilitar el desplazamiento horizontal en dicha vista de desplazamiento. Solo quiero desplazamiento vertical. ¿Cómo logro esto?
ios
objective-c
uiscrollview
Rahul Vyas
fuente
fuente
Respuestas:
Tienes que establecer la
contentSize
propiedad delUIScrollView
. Por ejemplo, siUIScrollView
tiene 320 píxeles de ancho (el ancho de la pantalla), puede hacer esto:La
UIScrollView
continuación, sólo desplazarse verticalmente, debido a que ya puede mostrar todo horizontalmente.fuente
ACTUALIZADO: (Después de que @EranMarom señaló en su comentario)
Puede detener el desplazamiento horizontal o vertical en el
ScrollViewDelegate
Método. Aquí es comoDetiene el desplazamiento horizontal:
Si desea desplazarse horizontalmente, debe aumentar el contentOffset.x. Evitar eso detiene el desplazamiento de la vista de desplazamiento en dirección horizontal.
Detiene el desplazamiento vertical:
Si desea desplazarse verticalmente, debe aumentar el contentOffset.y. Evitar eso detiene el desplazamiento de la vista de desplazamiento en dirección vertical.
El código anterior evita los cambios en
x
yy
de ascrollview contentOffset
y conduce a detener elscrollViewDidScroll:
método de desplazamiento .fuente
scrollView.contentOffset = CGPointMake(0, scrollView.contentOffset.y);
para deshabilitar el desplazamiento horizontal. Lo encuentro más legible, es más pequeño y no tiene sentido hacer la prueba para cero porque prácticamente no hay sobrecarga con el código que se ejecuta con esta poca frecuencia (es decir, unas pocas decenas de veces por segundo como máximo).scrollView.contentOffset.y = 0.0
para detener el desplazamiento vertical yscrollView.contentOffset.x = 0.0
para detener el desplazamiento horizontal, en lascrollViewDidScroll()
función de delegado. Sin embargo, creo que asegurarse de que seascrollView.contentSize
igual ascrollView.frame.size
es una solución mejor (correcta). Vea la respuesta de @danbeaulieu.desde el uso de iOS7
// y crea tu desplazamiento de página con 3 páginas
fuente
self.collectionView.pagingEnabled = YES;
me ayudó a resolver el problema con el desplazamiento suave (sin arrastrar). El problema estaba en el métodoscrollViewWillEndDragging:
: targetContentOffset era el mismo que scrollView.contentOffset y la lógica de detección de página no funciona correctamente.Cree dos salidas, una para su vista y otra para su vista de desplazamiento:
Luego, en su viewDidLayoutSubviews puede agregar el siguiente código:
Lo que hemos hecho es recopilar la altura y el ancho de la vista y configurar el tamaño del contenido de scrollViews para que coincida. Esto evitará que la vista de desplazamiento se desplace horizontalmente.
Más pensamientos:
CGSizeMake toma un ancho y un alto usando CGFloats. Es posible que deba usar la altura existente de UIScrollViews para el segundo parámetro. Que se vería así:
fuente
En mi caso, con Swift 4.2 puedes usar:
Deshabilitar el desplazamiento vertical:
Deshabilitar el desplazamiento horizontal:
fuente
Puede seleccionar la vista y luego
Attributes Inspector
desmarcarUser Interaction Enabled
.fuente
En mi caso, el ancho de contentView era mayor que el ancho de UIScrollView y esa fue la razón del desplazamiento horizontal no deseado. Lo resolví estableciendo el ancho de contentView igual al ancho de UIScrollView.
Espero que ayude a alguien
fuente
Tenía el tableview contentInset establecido en viewDidLoad (como se muestra a continuación) que es lo que causa el desplazamiento horizontal
Compruebe si hay algún contenido de vista de tabla establecido por diferentes razones y desactívelo
fuente
Luché con esto durante algún tiempo intentando sin éxito las diversas sugerencias en este y otros hilos.
Sin embargo, en otro hilo (no estoy seguro de dónde) alguien sugirió que usar una restricción negativa en el UIScrollView funcionó para él.
Entonces probé varias combinaciones de restricciones con resultados inconsistentes. Lo que finalmente funcionó para mí fue agregar restricciones iniciales y finales de -32 a la vista de desplazamiento y agregar una vista de texto (invisible) con un ancho de 320 (y centrada).
fuente
Prueba esto:
fuente
Deshabilite el desplazamiento horizontal anulando la
contentOffset
propiedad en la subclase.fuente
Introducida en iOS 11 es una nueva propiedad en
UIScrollView
La documentación indica que usted:
Junto con cualquier otra limitación de diseño automático que usted podría estar agregando que se desea limitar la
widthAnchor
de losUIScrollView
'scontentLayoutGuide
que ser del mismo tamaño que el 'marco'. Puede usar elframeLayoutGuide
(también introducido en iOS 11) o cualquier ancho externo (como susuperView
).ejemplo:
Documentación: https://developer.apple.com/documentation/uikit/uiscrollview/2865870-contentlayoutguide
fuente
Una vez que lo hice reemplazando el UIScrollView con un UITableView con solo 1 celda, funcionó bien.
fuente
Utilice esta única línea.
self.automaticallyAdjustsScrollViewInsets = NO;
fuente