Как создать настраиваемую панель UINavigationBar с закругленными двумя нижними углами? - PullRequest
1 голос
/ 05 мая 2020

Я получил панель навигации для закругления только двух нижних углов, но когда я использую clipsToBounds = true, она также обрезает верхнюю часть панели навигации. На изображении ниже я хочу, чтобы вся полоса была оранжевой, но только ее часть была оранжевой.

navBar

import UIKit

class MyNavBar: UINavigationBar {

override init(frame: CGRect) {
    super.init(frame: frame)
    setupNavBar()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    setupNavBar()
}

func setupNavBar() {
    tintColor = .white
    barTintColor = .orange
    layer.cornerRadius = 20
    layer.maskedCorners = [.layerMinXMaxYCorner, .layerMaxXMaxYCorner]
    clipsToBounds = true
    }
}

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Вы не должны изменять UINavigationBar иерархию просмотра или свойства слоя. существует специальный метод setBackgroundImage(_:for:barMetrics:) для настройки внешнего вида UINavigationBar. Я бы посоветовал отметить Настройка внешнего вида панели навигации в Документация Apple UIKit здесь ? .

, чтобы разрешить полную настройку внешнего вида панелей навигации , вы можете дополнительно предоставить собственные фоновые и теневые изображения. Чтобы предоставить настраиваемое фоновое изображение, используйте метод setBackgroundImage(_:for:barMetrics:), предоставляя объект UIImage для соответствующей позиции полосы и значений показателей.

0 голосов
/ 05 мая 2020

Вы можете добавить эту панель навигации в качестве настраиваемого представления в свой контроллер, чтобы получить такой же внешний вид

class CustomNavBar: UIView {

override init(frame: CGRect) {
    super.init(frame: frame)
    setupview()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    setupview()
}

func setupview() {
    tintColor = .white
    backgroundColor = .orange
    layer.cornerRadius = 20
    layer.maskedCorners = [.layerMinXMaxYCorner, .layerMaxXMaxYCorner]
    clipsToBounds = true
  }
}

А базовый класс контроллера

override func viewDidLoad() {
self.navigationController?.setNavigationBarHidden(true, animated: false)
    let nav = CustomNavBar()
    self.view.addSubview(nav)

   nav.translatesAutoresizingMaskIntoConstraints = false
    nav.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    nav.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    nav.widthAnchor.constraint(equalToConstant: UIScreen.main.bounds.maxX).isActive = true
    nav.heightAnchor.constraint(equalToConstant: 100).isActive = true
}

enter image description here

...