Recently I found a really wired problem in my app. It took me several weeks to resolve the issue. I would like to write this blog to record this issue.
Here is the simplified case. I have a view controller based on UITableViewController
. The table view is a static table view with several cells predefined in storyboard. Each cell has various height. The following is an example:
In cell Row2, there is a text view controller for editing a note.
When I run my app, I tap on edit button to change the text view into edit mode. This would cause the table view bouncing/jumping back and forth. At the end of this movement, the screen will stay at cell row 2 to allow me to edit the node. I don't like this kind of jumping movement.
When I test my app, I realize that I have another similar table view for editing note. That one does not have this jumping issue. Ok, I thought there must be something different to cause the issue.
I tried to compare every thing between those two screens, in storyboard settings and in view controller codes. I could not find anything obvious thing to cause the issue.
Finally, by carefully analyzing codes in both view controllers, I found that there is one line of code that caused the issue!
In smooth-none-jumper view controller, in the override func of viewDidAppear()
, there is no call to its super class; while in the jumping one, the super class method of viewDIdAppear()
is called, as in normal practice.
- override func viewWillAppear(_ animated: Bool) {
- // Call base class method will cause edit note jumpping
- // super.viewWillAppear(animated)
- ...
- }
This is the first time I encounter the case that the base class method should not be called, as in my comment above.
With this solution and change, my screen becomes smooth when I tap on the edit button:
By the way, I like to use static table view for my editing screens because the table view is a scrollable view.
0 comments:
Post a Comment