has content iphone ios uiview uiscrollview

iphone - content - uiscrollview autolayout



pasos para crear UIScrollView con Interface Builder (2)

Estoy tratando de usar UIScrollView y parece que hay algo fundamental que no entiendo.

Digamos que quiero usar UIScrollView en mi aplicación de iPhone. Tengo una vista llena de botones de 320x700. Obviamente, esto es demasiado grande para el iPhone que es 320x480. Entonces sé que tengo que usar un UIScrollView. Sin embargo, ¿es este el orden en que debería estar creando los objetos?

  1. Cree un UIScrollView que sea 320x700 como las dimensiones en "Ver"
  2. Coloca todos mis botones, etc. en esta vista de desplazamiento
  3. En viewDidLoad establece contentSize en 320x700
  4. Establezca el delegado de UIScrollView en el Propietario del archivo y la vista del FileOwner en UIScrollView
  5. Restablece el tamaño de la Vista a 320x480.

¿Es esto correcto?

Esto funciona, pero no tiene sentido para mí. Entiendo que se supone que View es el lienzo, donde agrego todos los elementos de la interfaz de usuario. Quiero que el "lienzo" de la aplicación de iPhone sea de 320x700, y quiero poder poner mis botones, etc. en este lienzo de 320x700. Pero si no cambio el tamaño de UIScrollView a 320x480, no se desplazará, porque necesito establecer el tamaño del contenido del UIScrollView más grande que su tamaño.

¡Pero si configuro el tamaño de UIScrollView a 320x480, entonces no veo la pantalla y los botones entre 480 y 700 en Interface Builder! ¡Así que parece que se supone que debo hacer todos mis ediciones y agregar todos los elementos de mi UI al UIScrollView, y luego volver a configurarlo en 320x480!

¿Hay alguna otra forma de hacer esto que tenga más sentido? ¿Qué me estoy perdiendo en mi comprensión de cómo debería funcionar esto?


Tiene razón, la Vista es el lienzo donde agrega todos los elementos de la interfaz de usuario. El constructor de interfaces es un poco raro al principio, pero te acostumbrarás, así es como funciona.

Te estás quedando atrapado en el hecho de que tienes que cambiar el tamaño del ScrollView. Deberías pensarlo así: ScrollView tiene un tamaño de fotograma y un tamaño de contenido. La forma en que está construida es que si el tamaño del contenido es mayor que el tamaño del marco, se desplazará. Tienes que hacer el marco tan grande como lo necesites en el constructor de interfaz para que puedas ubicar los elementos que entran. Cuando ejecuta la aplicación, debe cambiar el tamaño del marco del desplazamiento para que quepa dentro de la resolución de pantalla del iPhone. No tiene sentido que sus controles tengan un marco más grande que la pantalla.

-------------------------------------------- | | | | | | | | | | | | | | | | | | |<------------------ iPhone Screen frame | | | | | | | | | | | | | | | |<------- ScrollView Content size | | | | | | | | | | |<----------------- ScrollView Frame Size | | | | | | | | | | | | | | | | | | | | | ------------------------ | | | | | | | --------------------------------------------

Espero que esta representación aclare cómo deberían funcionar las cosas. Para decirlo de otra manera, el marco de desplazamiento es el agujero a través del cual puedes ver el contenido; si el todo es tan grande como el contenido, entonces no tienes necesidad de scroll cos puede verlo todo.

Sugeriría también tratar de escribir los componentes en código sin utilizar IB para obtener una mejor comprensión.


ACTUALIZAR

He publicado otra solución aquí que creo que es más simple y mejor.

ORIGINAL

Aquí hay otra forma de hacer esto para que te guste más:

  1. Establezca la clase personalizada del marcador de posición Propietario del archivo en la subclase del controlador de vista.
  2. Cree UIScrollView como un objeto de nivel superior en su plumilla. Establezca su tamaño en el tamaño de pantalla (320x460) o simplemente active una barra de estado en "Métricas simuladas".
  3. Conecte la salida de delegate la vista de desplazamiento al propietario del archivo.
  4. Establezca la salida de view del propietario del archivo en la view de desplazamiento.
  5. Crea un UIView como otro objeto de nivel superior en tu plumilla. Esta será su vista de contenido.
  6. Establezca el tamaño de la vista de contenido en 320x700.
  7. Cree una salida fuerte (o retenga, si no usa ARC) llamada contentView en su controlador de visualización (propietario del archivo) y conéctela a la vista de contenido.
  8. Pon tus botones en la vista de contenido.
  9. En su viewDidLoad del controlador de viewDidLoad , haga esto:

    - (void)viewDidLoad { [super viewDidLoad]; [self.view addSubview:self.contentView]; ((UIScrollView *)self.view).contentSize = self.contentView.frame.size; }

  10. En su viewDidUnload del controlador de viewDidUnload , haga esto:

    - (void)viewDidUnload { self.contentView = nil; [super viewDidUnload]; }


Tamaño completo