屏幕的某些部分在 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 中不可点击的主要内容,如果未能解决你的问题,请参考以下文章

Swift:仅从表中的某些行/部分中分离

UIButton 和 UILabel 在较小的屏幕上不可点击

一半屏幕无法点击

如何使 UIImageView 可点击并使其执行某些操作? (迅速)

按钮是不可点击的 swift

Swift:UIButton 不可点击,NSLayoutConstraint heightAnchor 问题