如何在tabBar中实现toolBar?

How to implement toolBar in tabBar?

我想在我的标签栏中实现一个工具栏,或者像在照片应用程序中那样结束我的标签栏。我给你看:

Tab Bar 点击 select 按钮时转向 Tool bar

我已经尝试将工具栏放在选项卡栏控制器视图中,但没有成功。

感谢您的回复!

一个简单的解决方案是在某些事件中隐藏 tabBar(照片应用程序有一个按钮可以执行此操作)。然后创建一个自定义工具栏并将其添加为视图控制器的子视图。

我相信这可能是您正在寻找的那种行为。您不必使用自定义 UIButton,您可以使用 UIBarButtonItem,但这取决于您,我只是选择使用自定义 UIButton 来演示它,以向您展示这是一种方法。

class ViewController: UIViewController {
    var selectButton: UIButton!
    var isInSelectMode = false
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        selectButton = UIButton(type: .system)
        selectButton.addTarget(self, action: #selector(selectButtonTapped), for: .touchUpInside)
        selectButton.setTitle("Select", for: .normal)
        view.addSubview(selectButton)
        
        let trashButton = UIBarButtonItem(barButtonSystemItem: .trash, target: nil, action: nil)
        toolbarItems = [trashButton]
        
        selectButton.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            selectButton.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor, constant: -15),
            selectButton.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor, constant: 15),
        ])
        
    }
    
    @objc func selectButtonTapped() {
        isInSelectMode = !isInSelectMode
        if isInSelectMode {
            selectButton.setTitle("Done", for: .normal)
            tabBarController?.tabBar.isHidden = true
            tabBarController?.tabBar.backgroundColor = .systemBackground
            navigationController?.setToolbarHidden(false, animated: true)
            
        } else {
            selectButton.setTitle("Select", for: .normal)
            tabBarController?.tabBar.isHidden = false
            tabBarController?.tabBar.backgroundColor = .clear
            navigationController?.setToolbarHidden(true, animated: true)
            
        }
        
    }

}

它是这样的:

==> 在 iOS 15.5

中测试

==> 首先你的视图控制器必须嵌入 UINavigationController

==> 在 viewDidLoad 中将 editButtonItem 设置为 navigationItem 并配置 UINavigationController 原生 toolbarItems

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.rightBarButtonItem = editButtonItem
    self.toolbarItems = [UIBarButtonItem(barButtonSystemItem: .trash, target: self, action: nil)]
}

==> 之后 override setEditing 方法并根据需要实现您的逻辑。你完成了

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)
    self.tableView.setEditing(editing, animated: true)
    self.tabBarController?.tabBar.isHidden = editing
    self.navigationController?.setToolbarHidden(!editing, animated: true)
}

You can check it out image here

==> 但是有一个问题,需要进一步的帮助...如果有人有任何想法,请在下方评论..

Issue : toolbar leave safeArea space and came top of that...

您也可以查看 Demo Native toolbar Demo