I’m implementing a chat message view with a table view and a text field 
underneath it. I want the most recent messages at the bottom, and the scroll 
position always to stay at the last row in the table.

There are some tricks to making sure the table scrolls to the bottom when it’s 
first drawn and when adding new rows. I seem to be able to make this work but 
I’m running into a problem keeping the table scrolled to the bottom when the 
keyboard is shown. I listen for the 'keyboard shown’ notification and adjust 
the height of my entire view by the height of keyboard. This works but the 
scroll position ends up wrong, as it doesn’t keep the same scroll position at 
the last row when the view is moved up. OK, so I set the contentOffset to 
compensate for this.

Here is the code I use in the Keyboard Will show notification:

[UIView animateWithDuration:keyboardAnimDuration
animations:
^{
    self.view.frame = newViewFrame;
}
completion:^(BOOL finished)
{
    [self.myTableView setContentOffset:newContentOffset animated:NO];
}];

So far, things work pretty well and things end up in the right place with. 
However, the animation is weird.

• Even though the view frame is changed inside the animation block, it moves 
into place immediately with no animation. No matter what duration I set it 
seems to be ignored.
• Then the keyboard scrolls into place. Because my view has already been moved 
up, you see a blank space where the keyboard moves up and over. This looks 
pretty bad.
• The table scrolls with an animation even though contentOffset is changed in 
the completion block and I set the animated param to NO.
• The time for the table scroll to animate is fixed.

Here is an example of this animation:

https://youtu.be/SBSts2UOJXw

(Try on slow speed to see it better)

I know this can be done correctly because I see other iOS chat apps that make 
the list view move up with the keyboard in a coordinated, smooth animation. Any 
ideas?

Doug

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to