导航时隐藏自定义中间按钮 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的主要内容,如果未能解决你的问题,请参考以下文章