导航时隐藏自定义中间按钮 swift 4

Posted

技术标签:

【中文标题】导航时隐藏自定义中间按钮 swift 4【英文标题】:Hide custom middle button when navigation push swift 4 【发布时间】:2018-12-24 09:01:22 【问题描述】:

我的标签栏中有 3 个栏项目,中间的一个我设置为禁用并用我的中间自定义按钮覆盖它

Swift 3 - How do I create a prominent button on a tab bar (e.g. camera button)

我想在导航推送新屏幕时隐藏底部栏。我尝试了这个,但它不起作用,因为 viewDidDisappear 从未被调用过

override func viewDidDisappear(_ animated: Bool) 
    super.viewDidAppear(animated)
    hidesBottomBarWhenPushed = true
    centerButton.isHidden = true

你们能告诉我如何实现吗?

【问题讨论】:

【参考方案1】:

看起来你有一个错字。使用 super.viewDidDisappear()

override func viewDidDisappear(_ animated: Bool) 
    //super.viewDidAppear(animated)
    super.viewDidDisappear(animated)
    hidesBottomBarWhenPushed = true
    centerButton.isHidden = true

【讨论】:

【参考方案2】:

您必须为 推送的视图控制器设置该属性。请务必注意,将其设置为 viewDidLoad 为时已晚。您应该在初始化视图控制器实例时设置:

class PushedVC: UIViewController 

    required init?(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)
        sharedInit()
    

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) 
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        sharedInit()
    

    private func sharedInit() 
        hidesBottomBarWhenPushed = true
    


当然,在使用情节提要时,您也可以只检查特定视图控制器的复选标记 Hide Bottom Bar on Push

为了确保您的中心按钮在这种方法中与标签栏一起隐藏/显示,您必须将其添加为UITabBar 子类中标签栏的子视图。然后覆盖hitTest 使其完全可点击(当然,只有当按钮超出标签栏的框架时才需要这样做):

class TabBar: UITabBar 

    let centerButton = ...

    // ...

    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? 
        if centerButton.frame.contains(point) 
            return centerButton
        

        return super.hitTest(point, with: event)
    

    // ...


【讨论】:

Button 我的自定义按钮不是标签栏控制器的一部分。如果我将它添加到 tabbarcontroller 视图,我无法单击按钮的上部,因为它不在 tabbar 视图中。注意我的按钮比tabbar大(一半在tabbar,另一半不在) 在哪里添加按钮?你想隐藏什么?只有按钮?还是包括按钮在内的整个标签栏? 整个栏包括按钮。当导航控制器推送一个新屏幕时,我的标签栏和我的自定义底部应该被隐藏。我的按钮看起来像这样***.com/questions/42477440/… 所以使用我的解决方案,栏会正确隐藏,但按钮会保持原位?我理解正确吗? 是的。如果我将按钮添加到标签栏(tabbar.addSubview(button))。然后它可以工作,但我的按钮高于标签栏,我们只能点击部分按钮(在标签栏视图内)。有什么想法而不是使用命中测试?

以上是关于导航时隐藏自定义中间按钮 swift 4的主要内容,如果未能解决你的问题,请参考以下文章

Swift 自定义导航项

条形按钮导航控制器隐藏 Swift

自定义导航栏隐藏按钮

导航栏中的 Swift 自定义后退按钮

iOS 导航栏-返回按钮-自定义

将多个自定义栏按钮添加到自定义导航栏