Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

98
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda