¿Alguien tiene problemas con el simulador de iPhone X alrededor del componente UITabBar?
El mío parece estar representando los íconos y el título uno encima del otro, no estoy seguro de si me falta algo, también lo ejecuté en el simulador de iPhone 8 y en un dispositivo real donde se ve bien tal como se muestra en el tablero de la historia
iPhone X:
iPhone 8
Respuestas:
Pude solucionar el problema simplemente llamando invalidateIntrinsicContentSize en la UITabBar en viewDidLayoutSubviews.
Nota: La parte inferior de la barra de pestañas deberá estar contenida en la parte inferior de la vista principal, en lugar del área segura, y la barra de pestañas no debe tener restricciones de altura.
fuente
[self.view layoutIfNeeded]
.landscapeImage
propiedad del botón de la barra de pestañas. Los tamaños recomendados están en [Apple HIG's] ( developer.apple.com/design/human-interface-guidelines/ios/… ) en Tamaño de icono personalizadoLa respuesta proporcionada por VoidLess soluciona los problemas de TabBar solo parcialmente. Soluciona problemas de diseño dentro de la barra de pestañas, pero si usa viewcontroller que oculta la barra de pestañas, la barra de pestañas se representa incorrectamente durante las animaciones (para reproducirlo es mejor 2 tener 2 segues, uno modal y otro push. Si alterna los segmentos, puede ver la barra de pestañas fuera de lugar). El siguiente código soluciona ambos problemas. Buen trabajo manzana.
Código Objective-C:
fuente
Hay un truco por el cual podemos resolver el problema.
Esto realmente está funcionando para mí.
O puede seguir este enlace para más detalles.
fuente
anular
UITabBar
sizeThatFits(_)
para safeAreafuente
Agregué esto a
viewWillAppear
mi costumbreUITabBarController
, porque ninguna de las respuestas proporcionadas funcionó para mí:fuente
Yo tuve el mismo problema.
Si configuro cualquier constante distinta de cero en la restricción inferior de UITabBar en el área segura:
Comienza a funcionar como se esperaba ...
Ese es el único cambio que hice y no tengo idea de por qué funciona, pero si alguien lo hace, me encantaría saberlo.
fuente
Mover la barra de pestañas 1 punto desde la parte inferior funcionó para mí.
Por supuesto, obtendrá un espacio al hacerlo que deberá llenar de alguna manera, pero el texto / íconos ahora están colocados correctamente.
fuente
¡Ajá! En realidad es magia!
Finalmente lo descubrí después de horas de maldecir a Apple.
UIKit realmente maneja esto por usted, y parece que los elementos de la barra de pestañas desplazados se deben a una configuración incorrecta (y probablemente a un error real de UIKit). No hay necesidad de subclases o una vista de fondo.
UITabBar "simplemente funcionará" si está restringido a la parte inferior de la supervista, NO al área segura inferior .
Incluso funciona en el generador de interfaces.
Configuración correcta
A veces todavía no funciona.
Lo que es realmente tonto es que también puede ver el error en IB, ¡incluso si agrega las restricciones exactas que IB agrega en los pasos anteriores!
fuente
Se solucionó usando UITabBar subclases para aplicar safeAreaInsets:
fuente
Resuelto para mí llamando
[tabController.view setNeedsLayout];
después de descartar el modal en el bloque de finalización.fuente
La UITabBar aumenta en altura para estar por encima del botón / línea de inicio, pero dibuja la subvista en su ubicación original y superpone el UITabBarItem sobre la subvista.
Como solución alternativa, puede detectar el iPhone X y luego reducir la altura de la vista en 32 píxeles para asegurarse de que la barra de pestañas se muestre en el área segura sobre la línea de inicio.
Por ejemplo, si estás creando tu TabBar, reemplaza programáticamente
Con este:
NOTA: Esto podría ser un error, ya que el sistema operativo establece los tamaños de vista y el diseño de la barra de pestañas. Probablemente debería mostrarse según la captura de pantalla de Apple en las Pautas de interfaz humana del iPhone X aquí: https://developer.apple.com/ios/human-interface-guidelines/overview/iphone-x/
fuente
Mi caso fue que había establecido una altura UITabBar personalizada en mi UITabBarController, como esta:
La eliminación de este código fue la solución para que la TabBar se mostrara correctamente en el iPhone X.
fuente
La solución más simple que encontré fue simplemente agregar un espacio de 0.2 pt entre la parte inferior de la barra de pestañas y la parte inferior de safeAreaLayoutGuide.bottomAnchor así.
fuente
Estaba teniendo el mismo problema cuando intentaba configurar el marco de UITabBar en mi TabBarController personalizado.
Cuando acabo de ajustarlo al nuevo tamaño, el problema desapareció
fuente
kPhoneXTabBarHeight
?Encontré esto hoy con un UITabBar agregado manualmente al controlador de vista en el guión gráfico, cuando me alineaba en la parte inferior del área segura con una constante de 0 obtendría el problema, pero cambiarlo a 1 solucionaría el problema. Tener la UITabBar hasta 1 píxel más de lo normal era aceptable para mi aplicación.
fuente
Me rasqué la cabeza por este problema. Parece estar asociado con la forma en que se tabula la barra y se agrega para ver la jerarquía. También probé las soluciones anteriores como llamar
invalidateIntrinsicContentSize
, configurar el marco y tambiénbottomInsets
dentro de una subclase de UITabBar. Parecen funcionar sin embargo temporalmente y se rompen de algún otro escenario o retroceden en la barra de pestañas al causar un problema de diseño ambiguo. Cuando estaba depurando el problema, intenté asignar las restricciones de altura a UITabBar y centerYAnchor, sin embargo, ninguno solucionó el problema. Me di cuenta en vista del depurador que la altura de tabBar era correcta antes y después de que el problema se reprodujera, lo que me llevó a pensar que el problema estaba en las subvistas. Utilicé el siguiente código para solucionar con éxito este problema sin retroceder en ningún otro escenario.Suposiciones: estoy haciendo esto solo para iPhone X, ya que no parece reproducirse en ningún otro dispositivo en este momento. Se basa en el supuesto de que Apple no cambia el nombre de la clase UITabBarButton en futuras versiones de iOS. Estamos haciendo esto en UITabBarButton solo cuando significa que si Apple agrega más subvistas internas a UITabBar, es posible que necesitemos modificar el código para ajustarlo.
¡Déjame saber si esto funciona, estará abierto a sugerencias y mejoras!
Debería ser simple crear un equivalente rápido para esto.
fuente
viewDidAppear(animated:)
miUITabBarController
y funcionó bien. ¡Gracias!De este tutorial:
https://github.com/eggswift/ESTabBarController
y después de la inicialización de la barra de pestañas escribiendo esta línea en la clase appdelegate
Resuelve mi problema de la barra de pestañas.
Espero que resuelva tu problema
Gracias
fuente
Seleccione la barra de pestañas y establezca la casilla de verificación "Guardar márgenes relativos del área" en el Editor del inspector de esta manera:
fuente
Tuve el problema similar, al principio se renderizó correctamente, pero después de configurarlo
badgeValue
en uno de los tabBarItem rompió el diseño. Lo que funcionó para mí sin subclasesUITabBar
fue esto, en miUITabBarController
subclase ya creada .Utilicé la supervista tabBar para asegurarme de que las restricciones / anclas estén en la misma jerarquía de vistas y evitar bloqueos.
Según mi entendimiento, dado que esto parece ser un error de UIKit, solo necesitamos reescribir / reestablecer las restricciones de la barra de pestañas para que el motor de diseño automático pueda diseñar la barra de pestañas nuevamente correctamente.
fuente
Si tiene alguna restricción de altura para la barra de pestañas, intente eliminarla.
Enfrenté el mismo problema y eliminarlo resolvió el problema.
fuente
Creé el nuevo UITabBarController en mi guión gráfico y envié todos los controladores de vista a este nuevo UITabBarConttoller. Entonces, todo funciona bien en el simulador de iPhone X.
fuente
Para iPhone, puede hacer esto, Subclase UITabBarController.
Ir a Storyboard y permitir Usar la Guía de diseño de área segura y cambiar la clase de UITabbarController a MyTabBarController
PD Esta solución no se prueba en caso de aplicación universal y iPad.
fuente
intente cambiar la pantalla de bienvenida con tamaño @ 3x es (3726 × 6624)
fuente
Para mí, eliminar el
[self.tabBar setBackgroundImage:]
trabajo, tal vez sea un error UIKitfuente
Para mí esto solucionó todos los problemas:
fuente
Estaba usando un
UITabBarController
en el guión gráfico y al principio funcionaba bien para mí, pero después de actualizar a la versión más nueva de Xcode comenzó a darme problemas relacionados con la altura de la barra de pestañas.Para mí, la solución fue eliminar lo existente
UITabBarController
del guión gráfico y volver a crearlo arrastrándolo desde la biblioteca de objetos del generador de interfaz .fuente
Para aquellos que escriben todo mediante
UITabBarController
programación, puede usarUITabBarItem.appearance().titlePositionAdjustment
para ajustar la posición del títuloEntonces, en este caso, si desea agregar un espacio entre Icon y Title, úselo en
viewDidLoad
:detectar si el dispositivo tiene la pantalla de muesca:
fuente
Estaba teniendo el mismo problema que se resolvió estableciendo los elementos de la barra de pestañas después de que se dispusiera la barra de pestañas.
En mi caso, el problema ocurrió cuando:
fuente
Creo que este es un error UIKit de iPhoneX. porque funciona:
fuente
Creo que podría estar colocando la barra de pestañas contra la guía de diseño segura inferior. Probablemente esto no sea lo que desea, ya que la barra de pestañas parece hacer sus propios cálculos para colocar los elementos de la barra de pestañas de forma segura en la parte superior de la línea de inicio en el iPhone X. Configure su restricción inferior contra la parte inferior de la supervista . Debería ver que se presenta correctamente en el iPhone X , así como en otros iPhones.
fuente