添加UITabbar时UIButton不可点击
Posted
技术标签:
【中文标题】添加UITabbar时UIButton不可点击【英文标题】:UIButton Not Clickable when added UITabbar 【发布时间】:2021-01-28 17:47:31 【问题描述】:当UITabbar上的UIButton添加到中间时如图。 UITabBar上方的按钮动作无法点击
func setupMiddleButton()
plusButton = UIButton(frame: CGRect(x: 0, y: 0, width: 64, height: 64))
var menuButtonFrame = plusButton.frame
menuButtonFrame.origin.x = tabBar.bounds.width/2 - menuButtonFrame.size.width/2
let hasNotched :Bool? = UIDevice.current.hasNotch
if hasNotched != nil
menuButtonFrame.origin.y = tabBar.bounds.height - menuButtonFrame.height - 15
else
menuButtonFrame.origin.y = tabBar.bounds.height - menuButtonFrame.height - 50
plusButton.frame = menuButtonFrame
plusButton.setTitle("+", for: .normal)
plusButton.titleLabel?.font = UIFont.helveticaNeue(ofSize: 40)
plusButton.backgroundColor = UIColor.init(hexString: "5E71FE")
plusButton.titleEdgeInsets = UIEdgeInsets(top: 0,left: 10,bottom: 10,right: 10)
tabBar.addSubview(plusButton)
plusButton.layer.cornerRadius = menuButtonFrame.height/2
plusButton.addTarget(self, action: #selector(plusButtonAction(sender:)), for: .touchUpInside)
【问题讨论】:
它是不可点击的,因为它的顶部在你的 UITabBar 的框架之外,或者可见但不能与用户交互。您需要将此按钮移到 UITabBar 之外 @Pancho 是否有任何自定义 TabBar 控制器可用于此类行为? 【参考方案1】:您需要像这样覆盖自定义标签栏类中的 hitTest 方法
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?
guard !clipsToBounds && !isHidden && alpha > 0 else return nil
for member in subviews.reversed()
let subPoint = member.convert(point, from: self)
guard let result = member.hitTest(subPoint, with: event)
else continue
return result
return nil
基本上问题是上部不可点击,因为它超出了标签栏的主要内容视图的范围。
此方法将检查点击是否在视图的边界内,如果是,它将返回视图并调用该按钮的操作。
苹果文档:Link
P.s 我最近遇到了同样的问题,得到了这个帮助,效果很好。
【讨论】:
【参考方案2】:我怀疑您尝试做的事情是不可能的,或者至少,Apple 不支持。 (因此不推荐,因为您可能会找到一种方法让它今天可以工作,但在未来的某些操作系统版本中不会。)
通常,Apple 不支持您将自定义视图对象添加到系统组件,如标签栏、导航栏、堆栈视图、表格/集合视图控制器等,除非通过文档化 API。
我建议不要做你想做的事。相反,在标签栏控制器的内容视图中添加一个按钮。我不知道您是否能够像您尝试做的那样使其部分覆盖标签栏。
【讨论】:
以上是关于添加UITabbar时UIButton不可点击的主要内容,如果未能解决你的问题,请参考以下文章
将 UIButton 放置在与 UITabBar 相同的空间中(隐藏时)
UItableView Cell上的UIbutton不可点击