From 27af3102354eaf2db61bd15f8db408678eb5ebdc Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 19 Oct 2017 23:43:55 -0400 Subject: [PATCH] Auto-dismiss keyboard if user scrolls away from bottom of the conversation. // FREEBIE --- .../ConversationViewController.m | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index 00d7189dd..8024b1dd9 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -543,6 +543,10 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) { { [self cancelVoiceMemo]; self.isUserScrolling = NO; + [self saveDraft]; + [self markVisibleMessagesAsRead]; + [self.cellMediaCache removeAllObjects]; + [self cancelReadTimer]; } - (void)viewWillAppear:(BOOL)animated @@ -3517,6 +3521,22 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) { { [self updateLastVisibleTimestamp]; [self autoLoadMoreIfNecessary]; + + if ([self isScrolledAwayFromBottom]) { + [self.inputToolbar endEditingTextMessage]; + } +} + +// See the comments on isScrolledToBottom. +- (BOOL)isScrolledAwayFromBottom +{ + CGFloat contentHeight = self.safeContentHeight; + // Note the usage of MAX() to handle the case where there isn't enough + // content to fill the collection view at its current size. + CGFloat contentOffsetYBottom = MAX(0.f, contentHeight - self.collectionView.bounds.size.height); + const CGFloat kThreshold = 250; + BOOL isScrolledAwayFromBottom = (self.collectionView.contentOffset.y < contentOffsetYBottom - kThreshold); + return isScrolledAwayFromBottom; } - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView