Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

93
Vistas
Barra de pestañas principal Clips Parte inferior de ViewControllers secundarios

Tengo un tabBarController con un tabBar curvo a través caShapeLayer .

Mi problema es que el tabBar de marco rectangular recorta la parte inferior de los viewControllers de los niños.

Mi objetivo/esperanza era pasar por debajo y sujetar la parte inferior por el marco curvo . Ver imagen para referencia.

ingrese la descripción de la imagen aquí

Cualquier orientación sería muy apreciada.

Código para TabBar curvo en TabBarController

 override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = .blue self.tabBar.backgroundColor = .clear self.tabBar.barStyle = .default self.tabBar.isTranslucent = false self.tabBar.clipsToBounds = false hideTabBarBorder() } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() addTabBarShape() } func addTabBarShape() { let shapeLayer = CAShapeLayer() let offset:CGFloat = tabBar.bounds.width/3.5 let bounds: CGRect = tabBar.bounds let rectBounds: CGRect = CGRect(x: bounds.origin.x, y: bounds.origin.y + (bounds.size.height / 2), width: bounds.size.width, height: bounds.size.height / 2) let rectPath: UIBezierPath = UIBezierPath(rect: rectBounds) let ovalBounds: CGRect = CGRect(x: bounds.origin.x - (offset / 2), y: bounds.origin.y, width: bounds.size.width + offset, height: bounds.size.height) let ovalPath: UIBezierPath = UIBezierPath(ovalIn: ovalBounds) rectPath.append(ovalPath) shapeLayer.path = rectPath.cgPath shapeLayer.fillColor = .blue shapeLayer.shadowPath = rectPath.cgPath shapeLayer.shadowColor = UIColor.black.cgColor shapeLayer.shadowOpacity = 0.1 shapeLayer.shadowRadius = 20 shapeLayer.shadowOffset = CGSize(width: 0, height: -8) shapeLayer.shouldRasterize = true shapeLayer.rasterizationScale = UIScreen.main.scale if let oldShapeLayer = self.tabBarShapeLayer { self.tabBar.layer.replaceSublayer(oldShapeLayer, with: shapeLayer) } else { self.tabBar.layer.insertSublayer(shapeLayer, at: 0) } self.tabBarShapeLayer = shapeLayer } func hideTabBarBorder() { self.tabBar.backgroundImage = UIImage.from(color: Constants.style.darkBlue) self.tabBar.shadowImage = UIImage() } extension UIImage { static func from(color: UIColor) -> UIImage { let rect = CGRect(x: 0, y: 0, width: 1, height: 1) UIGraphicsBeginImageContext(rect.size) let context = UIGraphicsGetCurrentContext() context!.setFillColor(color.cgColor) context!.fill(rect) let img = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return img! } }
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Esto se debe a que el ViewController secundario no actualizó su restricción y se refiere a la misma restricción de tabcontroller. Solo necesita revisar la restricción inferior del controlador. Estoy usando Snapkit aquí para corregir la restricción antes de que aparezca la vista. Puede establecer el margen inferior del controlador igual al superView y manejar el desplazamiento de la barra de pestañas dentro de su controlador.

Básicamente, esto ignorará la presencia de la barra de pestañas en la parte inferior.

 import UIKit import SnapKit class SomeViewController: UIViewController { override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) updateConstraints() } func updateConstraints() { view.snp.makeConstraints { make in make.edges.equalToSuperview() } } }
over 4 years ago · Santiago Trujillo Denunciar

0

Mi solución fue dibujar la curva en un punto y más alto que el marco de la barra de pestañas...

over 4 years ago · Santiago Trujillo Denunciar

0

Debe configurar backgroundImage en algo que no sea visible para que la vista parezca estar recortada por la barra de pestañas.

No estoy seguro de por qué lo está configurando explícitamente en UIImage.from(color: Constants.style.darkBlue) en su ejemplo.

Lo siguiente + copiar todo su otro código funciona bien para mí:

 override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() addTabBarShape() tabBar.backgroundImage = UIImage() tabBar.shadowImage = UIImage() }

También asegúrese de conectar el anclaje inferior de la vista (por ejemplo, UITableView ) no a view.safeAreaLayoutGuide.bottomAnchor (como lo haría normalmente) sino a view.bottomAnchor para que aparezca recortado por la barra de pestañas.

(Cambió algunos colores en esa implementación, pero aquí puede ver cómo recorta un UITableView )

Captura de pantalla con barra de pestañas recortando una vista

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda