SWIFT 屏幕的某些部分不可点击

Some part of the screen is not clickable in SWIFT

我的视图控制器(横向模式)下有一个嵌套的 UIview,它包含 2 个按钮。 第一个按钮位于屏幕的左侧,第二个按钮位于最右侧。我只是想知道为什么第二个按钮只有 1/4 的部分在工作。我在 0 轴上重新安排了那个按钮,效果很好。

我认为我在 uiview 上传递的框架有问题。 请看我的代码。

导入 UIKit

类视图控制器:UIViewController {

var screenHolder:ScreenHolder?
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    ProjectData.currentFrame = self.view.frame
    screenHolder = ScreenHolder(frame: ProjectData.currentFrame)
    self.view.addSubview(screenHolder!)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

此类问题的常见原因是子视图完全或部分超出其父视图的范围。发生这种情况时,子视图仍然可见,但变得不可点击。这是因为命中测试的工作方式 - 它从父视图向下传播,因此看不到父视图之外的点击,因此不会针对任何子视图进行测试。

因此,在这种情况下,您说:

nested UIview under my view controller (landscape mode) that holds 2 buttons

其中一个按钮(子视图)在嵌套的 UIView(父视图)之外。

检测/调试这种情况的最佳方法是将超级视图的 clipsToBounds 设置为 true。这样,如果一个子视图完全或部分在它外面,你将不能看到它,这样你就会明白发生了什么,你不会被可见性误导子视图。

这是为遇到同样问题的人提供的解决方案:)

导入 UIKit

class ViewController: UIViewController {

var screenHolder:ScreenHolder?
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

}

override func viewDidAppear(animated: Bool) {
    println("bounds \(view.bounds)")
    ProjectData.currentFrame = self.view.bounds


    screenHolder = ScreenHolder(frame: ProjectData.currentFrame)
    self.view.addSubview(screenHolder!)
    screenHolder?.clipsToBounds = true
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}