我有一个UITabBarController
的自定义子类,它调整了一个具有函数的委托来移动tabBar的框架(特别是frame.origin.y
)。当偏移量等于屏幕的高度时(也就是说,它在屏幕外隐藏),我有一个UIScrollView
延伸到屏幕的底部。在UIScrollView
内,我无法在tabBar视图的初始帧中接收触摸。
我已经看到了向UITabBar
或控制器视图添加难以处理的子视图的建议。这远非优雅,在处理可能占据整个屏幕的视图时会产生大量设计问题。我已经查看了UITabBarController
和UITabBar
的小公开实现代码,但我在那里看到的没有显示他们如何阻止这些触摸。
我知道命中测试的递归性质,但是没有覆盖命中测试并重新调整UITabBarController
子类中的触摸,这似乎相当不干净,我想不出一个通用的方法处理这个(事情。这个问题深入到了Apple的UITabBarController
/ UITabBar
实现中,但为了清晰起见,我提供了一些相关代码:
class tab_bar_controller: UITabBarController, UITabBarControllerDelegate, tab_bar_setter //has included function
{
//.... irrelevant implementation
func shift(visibility_percent: CGFloat) -> CGFloat //returns origin
{
self.tabBar.frame.origin.y = screen_size().height - (visibility_percent * self.tabBar.frame.size.height)
self.tabBar.userInteractionEnabled = visibility_percent != 0 //no effect
//self.view.userInteractionEnabled = visibility_percent != 0 //blocks all touches within screen.bounds
return self.tabBar.frame.origin.y
}
}