Я хочу сделать пользовательскую панель вкладок без использования контроллера панели вкладок - PullRequest
0 голосов
/ 07 февраля 2019

На этом изображении я помещаю панель вкладок, а затем помещаю элементы панели вкладок на нее.Затем я добавил этот код, но он перекрывает содержимое.Панель вкладок работает правильно, и весь контент перекрывается.Пожалуйста, помогите.

example

    import UIKit

    class TabViewController: UIViewController,UITabBarDelegate {
        @IBOutlet weak var tabbar: UITabBar!
        var tabViewController:UIViewController?
        var tbnViewController:UIViewController?
        var membersViewController:UIViewController?
        var profileViewController:UIViewController?
        override func viewDidLoad()    {
            super.viewDidLoad()
         self.tabbar.delegate = self
                      }
        func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
            switch item.tag {
            case 0:
                if tabViewController == nil   {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
                    tabViewController = storyboard.instantiateViewController(withIdentifier: "TabViewController") as! TabViewController

                        }
       self.view.insertSubview(tabBarController!.view!, belowSubview: self.tabbar)
            case 1:
                if tbnViewController == nil {
                    let storyboard = UIStoryboard(name: "Main", bundle: nil)
                    tbnViewController = storyboard.instantiateViewController(withIdentifier: "TbnViewController") as! TbnViewController
                               }
         self.view.insertSubview(tbnViewController!.view!, belowSubview: self.tabbar)
               case 2:
                if membersViewController == nil {
                    let storyboard = UIStoryboard(name: "Main", bundle: nil)
                    membersViewController = storyboard.instantiateViewController(withIdentifier: "MembersViewController") as! MembersViewController
                          }
             self.view.insertSubview(membersViewController!.view!, belowSubview: self.tabbar)
            case 3:
                if profileViewController == nil {
                    let storyboard = UIStoryboard(name: "Main", bundle: nil)
                    profileViewController = storyboard.instantiateViewController(withIdentifier: "ProfileViewController")
                          }
            self.view.insertSubview(profileViewController!.view!, belowSubview: self.tabbar)
                default:
                break
             }
             }

            }

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

1 Ответ

0 голосов
/ 07 февраля 2019

Похоже, вы просто добавляете представление подконтроллеров в свое собственное представление контроллера панели вкладок.Я бы предложил использовать механизм добавления дочернего контроллера представления, чтобы получить преимущества жизненного цикла viewController.Ниже приведен фрагмент кода: -

extension UIViewController {

    func addChildViewController(_ viewController : UIViewController?, forView container: UIView){
        guard let viewController = viewController else { return }
        viewController.view.translatesAutoresizingMaskIntoConstraints = false
        addChildViewController(viewController)
        container.addSubview(viewController.view)
        let childView = viewController.view

        container.addConstraint(NSLayoutConstraint(item: childView!, attribute: .top, relatedBy: .equal, toItem: container, attribute: .top, multiplier: 1.0, constant: 0))
        container.addConstraint(NSLayoutConstraint(item: childView!, attribute: .bottom, relatedBy: .equal, toItem: container, attribute: .bottom, multiplier: 1.0, constant: 0))
        container.addConstraint(NSLayoutConstraint(item: childView!, attribute: .leading, relatedBy: .equal, toItem: container, attribute: .leading, multiplier: 1.0, constant: 0))
        container.addConstraint(NSLayoutConstraint(item: childView!, attribute: .trailing, relatedBy: .equal, toItem: container, attribute: .trailing, multiplier: 1.0, constant: 0))
        viewController.didMove(toParentViewController: self)
    }

    func removeChildVC(_ viewController : UIViewController?){

        if let viewController = viewController{
            viewController.willMove(toParentViewController: nil)
            viewController.view.removeFromSuperview()
        }
    }
}

Используйте эти методы в пользовательской панели вкладок viewController

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...