屏幕的某些部分在 SWIFT 中不可点击
Posted
技术标签:
【中文标题】屏幕的某些部分在 SWIFT 中不可点击【英文标题】:Some part of the screen is not clickable in SWIFT 【发布时间】:2015-01-08 04:23:40 【问题描述】:我的视图控制器(横向模式)下有一个嵌套的 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.
【问题讨论】:
什么是“0轴”?您展示的这段代码有什么意义?如果它运行良好,那么您已经解决了问题;问题是什么? 【参考方案1】:此类问题的常见原因是子视图完全或部分超出了其父视图的范围。发生这种情况时,子视图仍然可见,但它变得不可点击。这是因为命中测试的工作方式 - 它从超级视图向下传播,因此看不到超级视图之外的点击,因此不会针对任何子视图进行测试。
所以,在这种情况下,你说:
在包含 2 个按钮的视图控制器(横向模式)下嵌套 UIview
其中一个按钮(子视图)位于嵌套的 UIView(父视图)之外。
检测/调试这种情况的最佳方法是将superview的clipsToBounds
设置为true
。这样,如果子视图完全或部分在它之外,您将不能够看到它,因此您将了解发生了什么并且您不会被子视图的可见性误导。
【讨论】:
谢谢马特!当我使用 clipToBound = true 时,我的视图只显示了屏幕的一半。作为解决方案,我将构造函数的代码粘贴到 viewDidAppear 函数中。【参考方案2】:对于有同样问题的人来说,这是解决方案:)
导入 UIKit
类视图控制器: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.
【讨论】:
以上是关于屏幕的某些部分在 SWIFT 中不可点击的主要内容,如果未能解决你的问题,请参考以下文章
UIButton 和 UILabel 在较小的屏幕上不可点击