Hylke Bron
07/06/2026, 12:37 PMfull keyboard access (support.apple.com/en-gb/…/ios), its hard / nigh impossible to scroll through the contents of a lazy column.
According to my testing it seems as if a new element is focussed through the keyboard compose scrolls a little bit, but not enough to show the next element, causing the next tab press to circle back to the top. Its also not consistent, sometimes we get lucky and compose scrolls ahead far enough so the next tab press can focus on the next item. And when you have the UI "just right" it works better than other times,
See attached in the thread some videos showing the problem.
I think this needs to be fixed within compose itself, there even are already some reports for (youtrack.jetbrains.com/issue/CMP-9859/iOS-Focus-jumps-to-top-when-navigating-LazyColumn-with-keyboard and youtrack.jetbrains.com/issue/CMP-10130/iOS-Accessibility-Keyboard-wont-navigate-to-offscreen-elements), but in case I need a fix sooner, I've written a solution for the short term as well. I wanted to share this with you and raise awareness of the issue, and maybe the thoughts of some others (maybe others have resolved this issue way better than I have attempted right now?)
See more in the thread.
ThanksHylke Bron
07/06/2026, 12:40 PMBringIntoViewRequester, and observed UIKit focus updates (through UIFocusDidUpdateNotification) to know what element is focussed on by the keyboard.
And to know what compose component was associated with that I abused the testTag, which corresponds to the accessibilityIdentifier, so I could call bringIntoView for the focussed element. Then the bringIntoView was also buggy, if the size didnt have enough bottom padding it wouldnt do anything at all, so i opted to request it always in the center of the screen, which works as long as you dont press tab too quickly in succession.
I've put this code in a singular modifier called iosKeyboardFocusable()
See snippet:Hylke Bron
07/06/2026, 12:40 PMHylke Bron
07/06/2026, 12:42 PMHylke Bron
07/06/2026, 12:43 PMHylke Bron
07/06/2026, 12:45 PMJacob Ras
07/06/2026, 12:58 PMHylke Bron
07/06/2026, 1:00 PM