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.
}
}
我的视图控制器(横向模式)下有一个嵌套的 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.
}
}