Добавление угла в UITabBarController

#ios #swift #uikit #uitabbarcontroller #tabbar

#iOS #swift #uikit #uitabbarcontroller #панель вкладок

Вопрос:

Привет, я новичок в разработке iOS и столкнулся с проблемой, которую я изо всех сил пытаюсь преодолеть. В принципе, я хотел бы добавить радиус угла в UITabBarController, однако я не знаю как. Я проверил несколько ресурсов в Stackoverflow, а также Youtube, и решения, которыми поделились люди, либо были слишком сложными для понимания, либо выдавали ошибки, такие как «Значение типа ‘UITabBarController’ не имеет элемента ‘layer’.». Кстати, я не использую storyboard.

(Примечание: Комментарии в коде предназначены для целей стилизации. Поскольку я не мог заставить их работать, я прокомментировал их.)

Код:

 import UIKit

class TabBarViewController: UIViewController, UITabBarControllerDelegate {
    
    var tabBarCnt: UITabBarController!
    override func viewDidLoad() {
        super.viewDidLoad()
        createTabBar()
        setUpBarStyle()
    }
    func createTabBar(){
        //        viewcontroller.tabBarItem.title = "Dash"
        //        viewcontroller.tabBarItem.image = UIImage.init(named: "imageName")
        //        viewcontroller.tabBarItem.selectedImage= UIImage.init(named: "imageName")
        tabBarCnt = UITabBarController()
        tabBarCnt.tabBar.barStyle = .default
//        let mapVC = MapViewController()
        let homeVC = HomeView()
//        mapVC.tabBarItem.title  = "Map"
        homeVC.title = "Home"
        tabBarCnt.viewControllers = [homeVC]
        
        self.view.addSubview(tabBarCnt.view)
        
    }
    func setUpBarStyle(){
//        would like to add corner radius
        
        
        let layer = CAShapeLayer()
//
//        layer.path = UIBezierPath(roundedRect: CGRect(x: 30, y: self.tabBarCnt.bounds.minY   5, width: self.tabBar.bounds.width - 60, height: self.tabBar.bounds.height   10), cornerRadius: (self.tabBar.frame.width/2)).cgPath
//        layer.shadowColor = UIColor.lightGray.cgColor
//        layer.shadowOffset = CGSize(width: 5.0, height: 5.0)
//        layer.shadowRadius = 25.0
//        layer.shadowOpacity = 0.3
//        layer.borderWidth = 1.0
//        layer.opacity = 1.0
//        layer.isHidden = false
//        layer.masksToBounds = false
//        layer.fillColor = UIColor.white.cgColor
//
//        self.tabBarCnt.layer.insertSublayer(layer, at: 0)
//        if let items = self.tabBarCnt.items {
//          items.forEach { item in item.imageInsets = UIEdgeInsets(top: 0, left: 0, bottom: -15, right: 0) }
//        }
//
//        self.tabBarCnt.itemWidth = 30.0
//        self.tabBarCnt.itemPositioning = .centered
    }
}

  

Комментарии:

1. можете ли вы опубликовать пример дизайна, которого вы хотите достичь? Кажется, вы хотите добавить некоторый радиус угла к UITabBar . Можете ли вы подтвердить?

2. Привет, я хотел бы иметь панель вкладок, подобную представленной по этой ссылке. medium.com/@gemix95 /…

Ответ №1:

Вы можете изменить существующую панель вкладок в вашем UITabBarController .

 func setUpBarStyle(){
    // Clipping needs to be enabled, otherwise rounded corners won't show.
    tabBarCnt.tabBar.clipsToBounds = true
    tabBarCnt.tabBar.layer.cornerRadius = 20
    // I guess you want to mask to top left and right corners. If not, change the maskedCorners to what you want.
    tabBarCnt.tabBar.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
}