【问题标题】:UITableView inside UIScrollView - Cell not clickableUIScrollView 内的 UITableView - 单元格不可点击
【发布时间】:2017-01-15 03:40:02
【问题描述】:

我遇到了 UITableView 无法检测到触摸的问题。

在一个仅限 iPhone 的应用程序中,我有一个 UIViewController,它包含:

  • UIScrollView
    • UIView(比如说内容视图)
      • 一些标签
      • UITableView(最后)

标签具有动态高度,因为它们包含一些我必须从网络检索的文本,所以我使用自动布局。 我在 viewDidLayoutSubviews 方法中设置 UIScrollView 的内容大小,我通过将 UITableView.frame.origin.y 和它的高度相加来做到这一点。

问题来了:当标签只包含一些单词并且 UITableView 不超过 iPhone 屏幕大小时,一切正常。但是当它们长大并且 UITableView 被推下时,当我向下滚动时,我不能再单击单元格了。另外,如果在加载视图时表格一半可见一半不可见,我可以单击可见单元格,但如果向下滚动,则无法单击其他单元格。

我正在使用 swift 2 和 Xcode 7。

这是一个例子:

可点击:

不可点击:

【问题讨论】:

标签: ios swift uitableview uiscrollview swift2


【解决方案1】:

执行以下操作:

yourView.clipToBounds = true

现在,如果UITableView 不出现意味着您的UIView 与按住UITableView 不同。

确保您的UIView 高度更大以容纳其中的内容,然后尝试点击它。

更新:

如果您使用的是AutoLayout,请执行以下操作。

  1. 将固定高度提供给UIView
  2. UIView高度约束的出口
  3. 现在,在viewDidLayoutSubviews 中将UIView 的约束更改为UITableView contentSize 高度。

    self.heightConstraint = self.tableView.contentSize.height

如果有帮助,请告诉我!

【讨论】:

  • 好的,这让事情变得更清楚了。现在UITableCell 没有出现。但是,在viewDidLayoutSubviews 方法中,我设置了self.contentView.frame.size.height = self.answerTable.frame.origin.y + self.answerTable.frame.size.height,这应该将ContentView 设置得足够高。我做错了什么?
  • 你在使用 AutoLayout
  • 是的,我正在使用 AutoLayout
  • 太棒了。我没有将约束设置为您所说的,但是编辑约束而不是使用frame.size... 有效。非常感谢!
  • @SohilR.Memon 你帮了我很多!为您的评论 +1!
【解决方案2】:

在此处向@Rémy Virin's 答案添加一些信息:

根据 Apple 文档,您不应该在 UIScrollView 中嵌入 UITableView。

重要提示:您不应在 UIScrollView 对象中嵌入 UIWebView 或 UITableView 对象。如果这样做,可能会导致意外行为,因为这两个对象的触摸事件可能会混淆和错误处理。

补充:解决方案由于您还想滚动表格上方的内容,一个解决方案是为表格放置一个Header View 并将内容放在那里让它沿表格视图滚动。

【讨论】:

  • 所以我应该把表格放在内容视图之外,并设置self.tableView.tableHeaderView = myContentView?但是表格不是仍在滚动视图中,还是我也应该删除它?如果是,表格会自动滚动标题视图吗?谢谢。
  • 只需在表格视图上方拖放一个 UIView...View 将自动成为表格的 Header View。在那里你可以放置内容。
【解决方案3】:

如果您使用Autolayout,则无需将contentSize 指定为UIScrollView,因为它会根据其子视图的高度自动展开。

在您的情况下,当tableView height 增加时,增加持有tableView 的基址UIView(您提到的内容视图)的高度。

UITableView 在扩展到其容器视图下方时变得无响应。

【讨论】:

  • 我决定手动指定contentSize,因为我无法通过自动布局使滚动视图正常工作。是否可以设置自动布局约束以基于tableview height 扩展UIView?编辑。这是我使用的代码:contentView.frame.size.height = self.answerTable.frame.origin.y + self.answerTable.frame.size.height scrollView.contentSize.height = self.answerTable.frame.origin.y + self.answerTable.frame.size.height。对吗?
  • 试试这个方法:init(item:attribute:relatedBy:toItem:attribute:multiplier:constant:)
  • 对于您显示的屏幕截图中的视图,UITableView 本身会做这些事情。您可以使用自定义 sectionHeaders 和 tableViewCells 来创建它
  • 没看懂,用这个方法初始化什么?
猜你喜欢
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
相关资源
最近更新 更多