调整大小的 UIView 上没有触摸事件

Posted

技术标签:

【中文标题】调整大小的 UIView 上没有触摸事件【英文标题】:No touch event on resized UIView 【发布时间】:2016-02-07 16:46:19 【问题描述】:

我的问题是在更新其 UITableView 子项中的数据后,将 UIView 的高度从 40pt(故事板中提到的高度)增加到大约 (1400) 的大小。该视图没有在增加的区域中获取事件。它只接收低于原始高度的触摸事件。

在 xib 文件中查看层次结构

ScrolView      
  - UIView(1) 
    -- UIView (1.1)  
    -- UIView (1.2)  (commentView) (width superview.width, height - 40) 
       ---UITableView (1.2.1) (commentTableView) (not in xib)

我的代码是 -

override func viewDidLoad() 
    super.viewDidLoad()

    commentView = view.viewWithTag(999)
    // adding tableview inside comment view
    if commentView != nil 
        commentTableView = UITableView(frame: CGRectMake(0, 0, commentView.frame.width, commentView.frame.height))
        commentView!.addSubview(commentController!)
    


// After adding rows to table, update size of table 

func afterSettingTableContent() 
     log.info("bound before change\(commentView?.bounds)")
    commentView?.frame.size.height = (commentTableView?.contentSize.height)!

    commentTableView.frame.size.height = (commentView?.frame.height)!
    scrollView.contentSize.height += (commentView?.frame.size.height)!

【问题讨论】:

一些可能性:(1)这项工作没有在主线程上完成,所以它没有正确更新,或者(2)一些超级视图正在拦截触摸。尝试检查NSThread.isMainThread() 是否为true,并将所有视图的clipsToBounds 设置为true 数据可见性和滚动很好。除了触摸没有问题 我假设您向 UIView 添加了轻击手势识别器。你能把代码贴在你添加手势的地方和你处理它的地方吗? @ahmedOnawale 不,没有额外的手势,只有默认一个。 Tableview 单元格仅包含 UIButtons 第一行的一部分能够获取事件(只有第一行能够突出显示) @VivekBansal 你试过我用clipsToBounds建议的吗? 【参考方案1】:

问题是commentView 的superview 的高度,即UIView(1) 是固定的。由于 clipToBounds 是错误的,子视图渲染得很好,并且它们没有收到任何触摸,因为它们的大小仍然是 40。增加视图 1 的高度后,一切正常。(愚蠢的错误)

【讨论】:

以上是关于调整大小的 UIView 上没有触摸事件的主要内容,如果未能解决你的问题,请参考以下文章

在UIView上捕获和记录触摸事件

UIScrollView 内的 UIView 没有收到触摸事件

以 UIScrollView 作为子类的 UIView 不接收触摸事件

尽管 userInteractionEnabled = true,但 UIView 中的 UIButton 没有响应触摸事件

在复合 UIView 中的触摸事件上突出显示 UITableViewCell

获取 UIView 上的最后一个触摸事件