Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITableView内部UIScrollView-单元格不可单击_Ios_Swift_Uitableview_Uiscrollview_Swift2 - Fatal编程技术网

Ios UITableView内部UIScrollView-单元格不可单击

Ios UITableView内部UIScrollView-单元格不可单击,ios,swift,uitableview,uiscrollview,swift2,Ios,Swift,Uitableview,Uiscrollview,Swift2,我有一个UITableView无法检测触摸的问题 在仅限iPhone的应用程序中,我有一个UIViewController,其中包含: UIScrollView UIView(比如说内容视图) 一些标签 UITableView(最后一个) 标签具有动态高度,因为它们包含一些我必须从web检索的文本,所以我使用自动布局。 我在viewdillayoutsubviews方法中设置UIScrollView的内容大小,我通过求和UITableView.frame.origin.y及其高度来实

我有一个UITableView无法检测触摸的问题

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

  • UIScrollView
    • UIView(比如说内容视图)
      • 一些标签
      • UITableView(最后一个)
标签具有动态高度,因为它们包含一些我必须从web检索的文本,所以我使用自动布局。 我在
viewdillayoutsubviews
方法中设置UIScrollView的内容大小,我通过求和
UITableView.frame.origin.y
及其高度来实现这一点

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

我使用的是swift 2和Xcode 7

以下是一个例子:

可点击:

不可点击:

在此处为答案添加一些信息:

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

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


添加:解决方案由于您也想在表格上方滚动内容,一种解决方案是为表格放置一个
标题视图
,并将内容放在那里,使其沿表格视图滚动。

如果使用
自动布局
,无需将
contentSize
指定为
UIScrollView
,因为它将通过获取其子视图的高度自动展开

在您的情况下,当
表视图高度
增加时,增加容纳
表视图
的基础
ui视图
(您提到的内容视图)的高度


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

请执行以下操作:

yourView.clipToBounds = true
现在,如果未显示
UITableView
,则表示按住
UITableView
时,您的
UIView
大小不一样

确保您的
ui视图
高度更高,以便容纳其中的内容,然后尝试点击它

更新:

如果使用的是
自动布局
,请执行以下操作

  • 将固定高度设置为
    UIView
  • ui视图的高度约束出口
  • 现在,在
    viewdilayoutsubviews
    中,将
    UIView
    的约束更改为
    UITableView
    contentSize
    高度

    self.heightConstraint=self.tableView.contentSize.height


  • 让我知道,如果这有帮助

    当您长按单元格时,它是否会单击?不,它根本没有响应。您是否使用了
    AutoLayout
    ?重复的-因此我应该将表格置于内容视图之外,并设置
    self.tableView.tableHeaderView=myContentView
    ?但是,该表是否仍在scrollview中,或者我是否也应该删除它?如果是,表格会自动滚动标题视图吗?谢谢。只需将UIView拖放到表格视图的正上方……该视图将自动成为表格的标题视图。您可以在那里放置内容。我决定手动指定
    contentSize
    ,因为我无法使scrollview与自动布局一起正常工作。是否可以设置自动布局约束以基于
    表格视图高度扩展
    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来创建它。我不明白,我应该用这个方法初始化什么?好的,这让事情变得更清楚了。现在,
    UITableCell
    不会出现。但是,在
    viewdilayoutsubviews
    方法中,我将
    self.contentView.frame.size.height=self.answerTable.frame.origin.y+self.answerTable.frame.size.height
    设置为
    contentView
    足够高。我做错了什么?你用的是自动布局吗是的,我用的是自动布局。我没有将约束设置为您所说的内容,但是编辑约束而不是使用
    frame.size…
    有效。非常感谢你@你帮了我很多忙+1欢迎您的评论!