Wrong scroll position of UITableView with using VoiceOver + UIRefreshControl

Number:rdar://35613722 Date Originated:17/11/2017
Status: Resolved:
Product:iOS + SDK Product Version:11.0
Classification: Reproducible:YES

UITableView has wrong content offset and not able to scroll content when tableView consist UIRefreshController and enable VoiceOver. This happens only when the content of tableview is bigger than frame.height - when we can scroll content.

Steps to Reproduce:
 - Project:
1. Create project on Xcode;
2. In Storyboard add UINavigationController with and as rootViewController should be UITableViewController
3. Enable "Refreshing" on UITableViewController in Storyboard.
4. Assign class(TableViewController) to UITableViewController
4. In TableViewController.swift add 
 refreshControl?.addTarget(self, action: #selector(TableViewController.refreshHandler), for: .valueChanged)
inside refreshHandler add 
    @objc func refreshHandler(){
5. For testing TableViewController should be scrollable: we return  numberOfRowsInSection as an example 50

 - Testing:
1. Enable "VoiceOver" on device;
2. Open the application(that described above).
3. Select any cell on the tableview
3. Using 3 finger scroll up to call UIRefreshControl

Expected Results:
The content(the first cell) of tableview now under navigation bar and user can't scroll down or select the first cell 

Actual Results:
User should be able to scroll content and select the first cell

iOS 11.1 (15B5066f) but also reproduce on iOS 10.3

iPad (5th generation) (Model A1822) - doesn't matter


Also experiencing this on iOS 11.2.5.

Has anyone found a workaround?

Sample project https://github.com/akuzminskyi/radar-tableview-refreshcontrol-voiceover

By andrii.kuzminskyi at Nov. 17, 2017, 2:35 p.m. (reply...)

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!