how has content iphone interface-builder ios4 uiscrollview

iphone - has - uiscrollview swift programmatically



¡UIScrollView no se desplazará! (9)

Coloqué todo el contenido de mi scrollview en IB. (botones, etiquetas, campos de texto, etc). El tamaño completo es de 500 de altura. Luego lo redimensioné a 436 de altura en IB.

Luego en el código, pongo esto es viewDidLoad:

optionsScrollView.contentSize = CGSizeMake(320,500);

Así que deja 64 píxeles que puedo desplazar. Funciona perfectamente.

También coloqué "UIScrollViewDelegate" en las <> llaves de @interface para mi archivo .h y vinculé la salida del delegado de scrollview al propietario del archivo en IB.

En IB tengo mi UIView. Luego tengo una sub-UIView con un UIScrollView como una subvista. Entonces el UIScrollView tiene un sub-UIImageView. UIScrollView y UIImageView son del mismo tamaño. Son mucho más grandes que el UIView de los que son subvistas. Asumí que esto haría funcionar el desplazamiento. No lo hace ¿Se requiere algún tipo de código para que funcionen las vistas de desplazamiento?


Como se mencionó en la respuesta aceptada, debe establecer la propiedad contentSize UIScrollView .

Esto se puede hacer en Interface Builder.

  1. Seleccione la vista de desplazamiento
  2. Seleccione la ''inspección de identidad'' en el panel Utilidades a la derecha
  3. Bajo ''Atributos de tiempo de ejecución definidos por el usuario'', haga clic en el botón ''+''
  4. Establezca el valor de ''Ruta clave'' en ''contentSize''
  5. Establezca el valor de ''Tipo'' en ''Tamaño''
  6. Establezca el valor de ''Valor'' en ''{ancho, alto}'' (por ejemplo: ''{320, 600}'')

Construye y ejecuta y tu vista de desplazamiento se desplazará.

La inserción de contenido no afecta el desplazamiento. Consulte ¿ Para qué es la propiedad UIScrollView contentInset?


Esto puede ser obvio para la mayoría, pero pasé siglos preguntándome por qué mi UIScrollView no se desplazaría, así que publico lo que me estaba deteniendo en caso de que ayude a alguien más:

El UIScrollView debe tener las dimensiones del área visible en la que desea que se presente y no el tamaño de su contenido.

Ridículo en mi nombre lo sé, pero por si acaso ayuda a alguien.


La otra cosa importante que no veo mencionada aquí es que UIScrollView no juega bien con AutoLayout. Si parece que has hecho todo correctamente, comprueba si tu ViewController tiene la reproducción automática activada y, si es así, apágala.

(Cada vez que se desplaza, las vistas se re-establecen. ¡Gak!)

Asi que:

  • Asegúrese de que el tamaño del contentSize de scrollview sea más grande que su frame.size
  • Asegúrese de que AutoLayout para ViewController esté desactivado.

La vista de desplazamiento funciona con esto:
Cuadro
entonces
contentSize
vistas u objetos etc ...

Si su marco está configurado a su tamaño de contenido, entonces no se desplazará. Así que configura tu marco (en el panel derecho de IB -> la última pestaña ''Inspector de tamaño ") a la longitud de tu aplicación (en mi caso es 367, ya que tengo una barra de navegación y una barra de pestañas) y luego programé contentSize para lo adivinaste ... más que tu marco para que pueda desplazarse.

¡¡Días felices!!


Para desplazarse, debe hacer que el marco de la vista de desplazamiento sea más pequeño que su contenido, la imagen o vista contenida.


Podría resolver el problema de desplazamiento con la siguiente respuesta:

https://.com/a/39945124/5056173

Por mi el truco fue:

  1. Ahora necesita establecer la altura del contenido UIView. Luego, puede especificar la altura de la vista de contenido (blech) o usar la altura de los controles contenidos dentro asegurándose de que el control de la parte inferior esté restringido a la parte inferior de la vista de contenido.

He establecido la altura y el ancho de la vista dentro del scrollView con alineación vertical y horizontal central y esa fue la razón, ¡por qué no funcionó!

Después de eliminar estas restricciones, necesito agregar el mismo ancho (scrollView y la vista dentro de scrollView) Y establezco la altura de la vista dentro de scrollView directamente con el contenido . Lo que significa: ¡ El último elemento en la vista debe tener una restricción inferior a la vista!


más, ¿habilitaste el desplazamiento? mira la propiedad

@property(nonatomic, getter=isScrollEnabled) BOOL scrollEnabled


UIScrollView.contentSize configurar UIScrollView.contentSize para que coincida con el tamaño total desplazable, que es el tamaño de marco de subvista en este caso.