2
votes

I have a problem with a UITableView not detecting touches.

In an iPhone-only app, I have a UIViewController, which containts:

  • UIScrollView
    • UIView (let's say a content view)
      • Some labels
      • UITableView (last)

The labels have a dynamic height, because they contain some text that I must retrive from the web, so I'm using auto layout. I'm setting the content size of the UIScrollView inside the viewDidLayoutSubviews method, and I'm doing this by summing UITableView.frame.origin.y and its height.

Here comes the problem: when the labels contain only some words and the UITableView does not exceed the iPhone screen size, everything works ok. But when they grow, and the UITableView gets pushed down, when I scroll down I can't click on the cell anymore. Also, if when loading the view the table is half visible and half not, I can click the visible cells, but if I scroll down, I can't click the others.

I'm using swift 2 and Xcode 7.

Here is an example:

Clickable:

enter image description here

Unclickable:

enter image description here

3
does it click when you long press on cell?Bista
No, it does not respond at all.Alessandro
Are you using AutoLayout?Sohil R. Memon

3 Answers

4
votes

Do the following thing:

yourView.clipToBounds = true

Now, if UITableView does not appears means your UIView is not same bigger to hold down UITableView.

Make sure that your UIView height is bigger to hold the contents in it and then try to tap on it.

Updated:

If you are using AutoLayout, then do the following thing.

  1. Give the fix height to UIView
  2. Take the outlet of height constraint of UIView
  3. Now, in viewDidLayoutSubviews change the constraint of UIView to UITableView contentSize height.

    self.heightConstraint = self.tableView.contentSize.height

Let me know, if this helps!

0
votes

Adding some info to the @Rémy Virin's answer here:

From Apple Documentation, you shouldn't embed a UITableViewinside a UIScrollView.

Important: You should not embed UIWebView or UITableView objects in UIScrollView objects. If you do so, unexpected behavior can result because touch events for the two objects can be mixed up and wrongly handled.

Addition:Solution Since you want to scroll the content above table also, the one solution is place a Header View for the Table and place the Content over there to make it Scroll along the Table View.

0
votes

If you use Autolayout, no need to specify contentSize to UIScrollView as it will automatically expand by taking the height of its subview.

In your case, increase the height of the Base UIView (content view as mentioned by you) which holds the tableView when the tableView height increases.

UITableView becomes unresponsive when it extends below its container view.