调整大小的 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 上没有触摸事件的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView 内的 UIView 没有收到触摸事件
以 UIScrollView 作为子类的 UIView 不接收触摸事件
尽管 userInteractionEnabled = true,但 UIView 中的 UIButton 没有响应触摸事件