uinavigationcontroller uinavigationbar ios7

IOS7: desplazamiento UIScrollView en UINavigationController



uinavigationbar (8)

¡Gracias a todos por las soluciones! Luché durante horas tratando de resolver el problema. Todo estaba bien cuando no había una barra de navegación involucrada, pero se descontroló en el momento en que incrustó ViewController en un NavigationController.

Lo resolví quitando la marca de Ajustar la vista de desplazamiento y las barras inferiores . Ambos se encuentran en el Inspector de atributos del ViewController. ¡Un millón de gracias!

Actualmente estoy migrando mi aplicación en iOS 7 y me he quedado estancado durante horas en la nueva administración del control de navegación / barra.

Antes, cuando teníamos un controlador de navegación, teníamos un fragmento como este:

UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:[[MainViewController alloc]init]];

En el generador de interfaz, tuvimos la opción de establecer una barra de navegación existente para la vista y todo coincidía con el contenido de la vista real.

Bien, ahora no tengo ni idea de cómo diseñar correctamente con el constructor de interfaz. Todavía tengo mi fragmento para inicializar mi navegador. Sin embargo, en el constructor de interfaz para mi MainViewController si configuro una barra de estado para la barra de navegación translúcida u opaca, tengo un desplazamiento de 44px en la parte superior (ver a continuación).


Interface Builder_________________________Y el resultado


Ahora, si configuro la barra de estado como none, no hay offset en la parte superior, pero como la vista en el simulador es más pequeña debido a la barra de navegación, la parte inferior de la vista en el constructor de interfaces está cortada.

Interface Builder_________________________Y el resultado

Supongo que realmente me falta algo aquí, pero no puedo encontrar ningún tema o información de apple en iOS7 Transitions Guide sobre eso.

Gracias por tu ayuda


EDITAR

Como podemos ver en las imágenes, el primer elemento secundario de la vista es un UIScrollView que contiene ambas etiquetas, el problema no aparece cuando no hay vista de desplazamiento. También aparece si se trata de una UITableView. Si una etiqueta está fuera de UIScrollView, no hay compensación para esa etiqueta.


Con AutomaticAdjustsScrollViewInsets establecido en YES (la configuración predeterminada), hay una falta de coincidencia en la posición de la vista de desplazamiento entre ios6 e ios7, por lo que para que sean coherentes, debe deshabilitar esta configuración. Sin embargo, ios6 se bloqueará si aparece automáticamente AdjustsScrollViewInsets, por lo que debe realizar un cambio programático de automáticamente AjustaScrollViewInsets condicional en ios7 o bien desactive la opción usando el guión gráfico / NIB


La respuesta de @ Justafinger funcionó como un encanto para mí también.

Solo quería agregar que esta configuración también se puede ajustar fácilmente desde el constructor de interfaz.

  1. Seleccione su controlador de vista
  2. Haga clic en la pestaña ''Inspector de atributos''
  3. Desmarque ''Ajustar las configuraciones de la vista de desplazamiento''
  4. ¡Disfrutar!

Me encontré con este mismo problema, pero encontré una propiedad bastante extraña en ViewController en el constructor de interfaz que parece haber estado causando esto para mí. Hay un conjunto de casillas de verificación "Ampliar bordes". Eliminé el control "Debajo de las barras superiores" y todo comenzó a acomodarse correctamente para mí.


OK, así que encontré la solución, he establecido en mi controlador la propiedad:

self.automaticallyAdjustsScrollViewInsets = false

Realmente no entiendo el verdadero beneficio de esta propiedad, (o por qué el valor predeterminado es verdadero)

La única documentación que encontré estaba allí:

Actualizar

En iOS 11, automaticallyAdjustsScrollViewInsets AdjustsScrollViewInsets está en desuso

Ahora deberías usar:

self.tableView.contentInsetAdjustmentBehavior = .never

También le recomiendo que consulte esta pregunta y su respuesta para obtener una mejor comprensión de esas propiedades


Parece que una solución alternativa es ver el archivo del guión gráfico como "iOS 6.1 y versiones anteriores" (seleccione el archivo del guión gráfico-> Inspector de archivos-> Documento del compilador de interfaz-> Ver como. El posicionamiento de las subvistas en este modo muestra el desfase.


También me enfrento a este problema.

UIScrollView tamaño del contenido de UIScrollView se calcula mediante el sistema operativo como otros tamaños, orígenes proporcionados por el sistema de restricciones, es por eso que OS tiene dudas.

Cómo solucionarlo: debe definir explícitamente el tamaño del contenido de UIScrollView :

  1. Incrustar contenido desplazable en UIView (lo cambio de nombre a ContentView )
  2. Agregar restricciones:

ContentView.Weight = View.Weight y ContentView.Height = View.Height


Tuve un problema similar, después de descartar un ViewController, el contentOffset de mi tableView se cambió a (0, -64).

mi solución fue un poco extraña, probé todas las otras respuestas pero no tuve éxito, lo único que solucionó mi problema fue cambiar la posición tableView en el árbol de controles de .xib

fue el primer control en la Vista padre como este:

Moví el TableView justo después de ImageView y funcionó:

parece que poner la vista de tabla en la primera posición estaba causando el problema, y ​​mover la vista de tabla a otra posición solucionó el problema.

PD No estoy usando autoLayout ni guiones gráficos

¡Espero que esto pueda ayudar a alguién!