Switch Control loads all UITableView rows at once

Originator:darrylt
Number:rdar://20946017 Date Originated:05/13/2015
Status:Open Resolved:
Product:Accessibility Product Version:
Classification: Reproducible:
 
iOS 8.3 introduced a regression which causes all rows for a given UITableView to be loaded, regardless of whether they are needed for display, when Switch Control is enabled. This causes significant periods of unresponsive UI whenever a new table view loads.

This regression also exists in iOS 8.4 beta 3. The regression does not exist in iOS 8.2 and earlier.

Comments

Actual Results:

A cell is loaded for every row in the table view and the UI is unresponsive while this loading takes place.

Expected Results:

Only the cells initially required for display should be loaded. Assuming standard metrics, this should be approximately somewhere between 10 and 20 cells. This is the behavior when Switch Control is not running. (It is also the behavior when Switch Control is running prior to iOS 8.3.)

Steps to Reproduce:

  1. Implement a UITableViewDataSource which provides a large number of rows (600 is enough to notice significant impact with trivial cells). Associate this data source with a UITableView in an app.
  2. Run the app with Switch Control enabled and navigate to the UITableView, if necessary.
  3. Observe that Switch Control is completely unresponsive for a significant period of time while cell loading blocks the main thread. During this time, Switch Control may “give up” on item mode and try switching to point mode.

Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!