I'm using custom UITableViewCell
s inside my UITableView
. Each of these UITableViewCell
s is pretty high and contains a UITextField
at the top.
When a user taps the UITextField
in order to edit it, a keyboard appears and the UITableView
scrolls automatically so that the cell is at the top of the screen.
The problem is that this scrolls the UITableView
to the bottom of the UITableViewCell
, not the top. When the UITableViewCell
is high and edited the UITextField
is at the top so you can't see the UITextField
. I know how to scroll the UITableView
programmatically, but I just don't know how to disable this automatic scrolling so that I can scroll the UITableView
on my own. How can I do this?
The autoscroll-behavior is located in the
UITableViewController
functionality.To disable the automatic scrolling I found two ways:
UITableViewController
simply aUIViewController
- set the datasource and delegate on your own.viewWillAppear
method and don't call[super viewWillAppear: animated]
With both solution you disable not only the Autoscroll, but also some other nice but not essential features, that are described in the overview of Apple´s class reference:
https://developer.apple.com/documentation/uikit/uitableviewcontroller
Did you try to set "scrollsToTop" - tableview's property to NO. By default it is YES.
The issue for me was not so much that it scrolled but that it took the text view being edited off the screen.
So instead of preventing the scrolling, I just rescroll the tableview to where I want when the editing is triggered, like this:
You can try doing the following:
This should disable the scrollview in the tableview.
The best way is to subclass
UITableView
and then overridesetContentOffset(_ contentOffset: CGPoint, animated: Bool)
and not to callsuper.setContentOffset(_ contentOffset: CGPoint, animated: Bool)
. In this method is where the view controller is doing the automatic scroll.Unfortunately, overriding -viewWillAppear: doesn't work for me in iOS 8.
Here is my solution (as in UITableViewController implementation):
Since the auto-scrolling behaviour is invoked by UIKeyboard's show/hide notifications, so just NOT observe them.