On Tue, May 24, 2016, at 05:46 PM, Kyle Sluder wrote: > On Tue, May 24, 2016, at 05:37 PM, Alex Zavatone wrote: > > > > On May 24, 2016, at 4:02 PM, Kyle Sluder wrote: > > > > > On Tue, May 24, 2016, at 12:33 PM, Doug Hill wrote: > > >> OK, this might have been more obvious to people, but it finally came to > > >> me how to handle the keyboard display. > > >> > > >> Instead of changing the view size, I move the center of the view up, then > > >> apply a content inset to the table to adjust for the part of the table > > >> offscreen. Animations seem to work much better now. > > > > > > Did you really mean “move the center of the view”? Or did you mean > > > scrolling the center of the viewport? > > > > > > Either way, contentInset is definitely the way to handle this. > > > > Just checking. You meant to use contentInset and not contentOffset? > > Yes, I meant contentInset. contentOffset is just another name for > self.bounds.origin.
To clarify: you might want to change both the contentInset (to avoid the keyboard) *and* the contentOffset (to move content that has been obscured by the keyboard back into the visible part of the scrollview.) --Kyle Sluder > > --Kyle Sluder > > > > > I'm going to need to handle this exact issue soon too. > > > > Thanks, Kyle. > > > > Alex Zavatone > > > > > --Kyle Sluder > > > > > >> > > >> Doug Hill > > >> > > >>> On May 20, 2016, at 5:21 PM, Doug Hill <cocoa...@breaqz.com> wrote: > > >>> > > >>> 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