UIScrollView中的UITableView - Cell无法点击

时间:2016-09-07 12:31:18

标签: ios swift uitableview uiscrollview swift2

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

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

  • 的UIScrollView
    • UIView(让我们说一个内容视图)
      • 一些标签
      • UITableView(最后)

标签有动态高度,因为它们包含一些我必须从网页上回溯的文字,因此我使用自动布局。 我在viewDidLayoutSubviews方法中设置了UIScrollView的内容大小,我通过总结UITableView.frame.origin.y及其高度来实现这一点。

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

我正在使用swift 2和Xcode 7。

以下是一个例子:

可点击:

enter image description here

无法点击:

enter image description here

3 个答案:

答案 0 :(得分:3)

做以下事情:

yourView.clipToBounds = true

现在,如果UITableView未显示,则表示UIViewUITableView相比不大一样。

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

  

更新:

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

  1. 将修复高度设为UIView
  2. 取出UIView
  3. 的高度限制出口
  4. 现在,在viewDidLayoutSubviews中将UIView的约束更改为UITableView contentSize身高。

    self.heightConstraint = self.tableView.contentSize.height

  5. 如果有帮助,请告诉我!

答案 1 :(得分:0)

@Rémy Virin's答案中添加一些信息:

从Apple文档中,您不应该将UITableViewinside嵌入UIScrollView。

  

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

添加:解决方案 由于您还希望滚动表格上方的内容,因此一个解决方案是为表格放置Header View并将内容置于其上在那里使它沿着表视图滚动。

答案 2 :(得分:0)

如果您使用someFunction():Observable<Response>{ let response$ = new Observerable(); if (...){ response$ = this.http.get(url1) }else{ response$ = this.http.get(url2) } return response$ } ,则无需指定public social(providerName:string):Observable<Response>{ let response$ = new Observable<Response>(); let url =providerName+'/someUrl' let authWindow; if(window.cordova){ let authWindow= InAppBrowser.open(url, '_blank', 'location=no'); authWindow.addEventListener('loadstop', event => { if(event.url.indexOf(`${providerName}/callback`) > -1){ authWindow.close() } }); authWindow.addEventListener('loaderror', event =>{ if(event.url.indexOf(`${providerName}/callback`) > -1){ authWindow.close() } }); authWindow.addEventListener('exit', () => { setTimeout(()=>{ response$ = this.http.get(...) },500) }) }else{ authWindow = createWindow(popupUrl); let window = Observable.interval(1000); let pingWindow = window.subscribe( ()=>{ if(authWindow.closed){ pingWindow.unsubscribe(); response$ = this.http.get(...) } }) } return response$ INSERT INTO t1 (money) values (nullif('0.00', '')) ,因为它会通过获取其子视图的高度自动展开。

在您的情况下,请增加基座Autolayout的高度(您提到的内容视图),contentSize增加UIScrollView时保持UIView

tableView在扩展到容器视图之下时变得无法响应。