gpt4 book ai didi

swift - 我想制作一个自定义标签栏而不使用标签栏 Controller

转载 作者:行者123 更新时间:2023-11-30 10:50:52 24 4
gpt4 key购买 nike

在此图像中,我在其上放置了一个选项卡栏,然后在其上放置了选项卡栏项目。然后我添加了这段代码,但是它与内容重叠。标签栏工作正常并且所有内容都是重叠的。请帮忙。

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
}
}

}

在此图像中,在其上放置一个选项卡栏,然后在其上放置选项卡栏项目并放置此代码,但其中存在一个问题,它将内容相互重叠,选项卡栏工作正常,并且所有内容重叠,请帮忙。

最佳答案

看起来您只是将子 Controller 的 View 添加到自定义选项卡栏 Controller View 中。我建议使用添加 subview Controller 的机制来获得 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()
}
}
}

在自定义标签栏 View Controller 中使用这些方法

关于swift - 我想制作一个自定义标签栏而不使用标签栏 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54567205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com