has doesn content ios uiscrollview interface-builder autolayout xcode6

ios - doesn - UIScrollView+Vista centrada+Tamaño de contenido desplazable ambiguo+muchos tamaños de iPhone



uiscrollview autolayout (3)

Yo tengo:

  • Aplicación, que debería funcionar en modo paisaje y retrato.
  • Vista con vista de desplazamiento de tamaño completo en la parte superior.
  • algunas vistas dentro de la vista de desplazamiento con ancho y alto fijos. (con restricciones H y W añadidas)
  • configurar para ver dentro de la vista de desplazamiento como horizontal centrado en el contenedor. (añadido según la restricción)

Tengo una advertencia en el generador de interfaces "Tiene un ancho de contenido desplazable ambiguo".

La única forma de solucionar este problema, que yo sepa, es establecer restricciones finales y iniciales. Pero para diferentes iPhones (5.5 ", 4.7", 4 ") necesito establecer diferentes restricciones de seguimiento y de cola.

¿Cómo puedo eliminar esta advertencia y aún tener la vista centrada horizontalmente con W y H fijos para todos los tamaños de iPhone?

Creo el repositorio de Github para ilustrar este problema: ScrollViewAmbigous

Esto no es un duplicado de la ambigüedad del tamaño del contenido desplazable de UIScrollView , pero es similar (aunque no se respondió), pero esta pregunta está especialmente relacionada con diferentes tamaños de iPhones.


¡Por la mañana, con una taza de café recién preparada, descubrí una solución para este problema!

Entonces, aquí está el estado inicial para el caso más simple:

  1. scrollView con 0 restricciones a todos los bordes
  2. Botón centrado horizontal y vertical con ancho y altura fijos
  3. Y, por supuesto, Has ambiguous scrollable content width y Has ambiguous scrollable content height advertencias molestas .

Todo lo que tenemos que hacer es:

  • Agregue 2 restricciones adicionales, por ejemplo, "0" para el final y / o espacio inferior para nuestra vista (en mi caso, UIButton)

Importante: tienes que agregar restricciones finales y / o finales . No es "líder y superior" - ¡no es trabajo!

Puede comprobarlo en mi proyecto de ejemplo, que muestra cómo solucionar este problema: ScrollViewAmbigous

PD

No sé por qué funciona y cómo Xcode detecta qué restricción tiene más prioridad (porque no tengo una prioridad explícita para estas restricciones), pero le agradeceré que alguien explique por qué funciona en los comentarios a continuación.


Parece que hay mucha confusión sobre este tema. Mi opinión es que un UIScrollView debe tener DOS restricciones de espacio al final, un ''interno'' que lo conecta a una de sus subvistas (para que pueda conocer el ancho de su contenido), y otro ''externo'' que lo conecte a un hermano o supervisor. sabe el ancho de su marco.

El mismo principio se aplica para la altura, es decir, dos restricciones de espacio inferior.


Problema

  1. La advertencia nos dice que el tamaño del contenido de la vista de desplazamiento depende de sus subvistas.
  2. Si bien su subvista no tiene una regla estricta de posición y tamaño (sin restricciones fijas), confundirá el tamaño del contenido de scrollview generado por el plumín.

Solución :

  1. Realice solo una subvista como ''contentView'' para scrollview.
  2. Agregue restricciones estrictas (fijas) a ese ''contentView''.

    Práctica recomendada: igual anchura y altura que su vista de desplazamiento.

  3. Agregue todas las demás subvistas y restricciones a su ''contentView''.