我的视图控制器(横向模式)下有一个嵌套的UIview,它包含2个按钮。 第一个按钮位于屏幕左侧,第二个按钮位于最右侧。我只是想知道为什么只有1/4部分的第二个按钮正常工作。我在0轴上重新安排了这个按钮,效果很好。
我认为我在uiview上传递的框架有问题。 请看我的代码。
导入UIKit
类ViewController: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.
}
}
答案 0 :(得分:0)
此类问题的常见原因是子视图完全或部分超出其超级视图的范围。当发生这种情况时,子视图仍然可见,但它变得无法访问。这是因为命中测试的工作方式 - 它从超视图向下传播,因此不会看到超级视图外部的点击,因此不会针对任何子视图进行测试。
所以,在这种情况下,你说:
我的视图控制器(横向模式)下的嵌套UIview,它包含2个按钮
其中一个按钮(子视图)位于嵌套的UIView(超级视图)之外。
检测/调试此类情况的最佳方法是将超级视图的clipsToBounds
设置为true
。这样,如果子视图完全或部分位于其外部,您将不能够看到它,因此您将了解发生了什么,并且您不会被子视图的可见性误导。
答案 1 :(得分:0)
以下是那些遇到同样问题的人的解决方案:)
导入UIKit
类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.
}
}