我有一种强烈的感觉,这可能是苹果只需修复的Xcode错误。我有一个视图控制器作为根控制器嵌入在导航控制器中。视图控制器有一个与顶部布局指南垂直对齐的按钮。视图控制器的按钮工作正常,所有可点击的区域都在工作。
但是,如果我将相同或类似的视图控制器推到导航堆栈上,它的按钮将无法完全打开。按钮的顶部(大约10个像素左右)不再可以点击。如果我尝试点击按钮的左上角,则会轻触导航栏上的后退按钮,即使我显然没有点击导航栏边界。我认为这是苹果的一个错误,但我想知道是否有人知道修复。如果有人需要,这是link to the github project。
答案 0 :(得分:5)
这是iOS的默认行为。许多class MenuScene: SKScene {
var menuView = UIView()
let btn = UIButton(type: UIButtonType.Custom) as UIButton
func someFunc() {
btn.backgroundColor = UIColor.blueColor()
btn.setTitle("Button", forState: UIControlState.Normal)
btn.frame = CGRectMake(100, 100, 200, 100)
btn.addTarget(self, action: "clickMe:", forControlEvents: UIControlEvents.TouchUpInside)
self.menuview.addSubview(btn)
}
func clickMe(sender:UIButton!)
{
let scene = GameScene.unarchiveFromFile("GameScene") as! GameScene
scene.scaleMode = SKSceneScaleMode.AspectFill
view!.presentScene(scene)
}
}
在iOS中具有这种扩展的触摸功能。例如,UIView
,UINavigationBar
,UITabBar
等。我相信这是为了更轻松地触摸这些控件。
如果您仍想覆盖此默认行为。您可以通过继承UISecgmentedControl
并在子类中添加此方法来完成此操作:
UINavigationBar
向您的Github project发出合并请求。
答案 1 :(得分:1)
如果有人需要,这里有一个快速版本的解决方案:
class CustomNavBar: UINavigationBar {
override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {
if pointInside(point, withEvent: event) {
userInteractionEnabled = true
} else {
userInteractionEnabled = false
}
return super.hitTest(point, withEvent: event)
}
}
Swift 3 以及更高:
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
isUserInteractionEnabled = self.point(inside: point, with: event)
return super.hitTest(point, with: event)
}