diff --git a/Signal/src/ViewControllers/ConversationView/ConversationInputToolbar.m b/Signal/src/ViewControllers/ConversationView/ConversationInputToolbar.m index a58049906..139785cdb 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationInputToolbar.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationInputToolbar.m @@ -13,6 +13,7 @@ #import "UIView+OWS.h" #import "ViewControllerUtils.h" #import +#import #import #import @@ -221,11 +222,17 @@ const CGFloat kMaxTextViewHeight = 98; // Momentarily switch to a non-default keyboard, else reloadInputViews // will not affect the displayed keyboard. In practice this isn't perceptable to the user. // The alternative would be to dismiss-and-pop the keyboard, but that can cause a more pronounced animation. - self.inputTextView.keyboardType = UIKeyboardTypeNumbersAndPunctuation; - [self.inputTextView reloadInputViews]; - - self.inputTextView.keyboardType = UIKeyboardTypeDefault; - [self.inputTextView reloadInputViews]; + // + // This is surprisingly expensive (~5ms), so we do it async, *after* the message is rendered. + dispatch_async(dispatch_get_main_queue(), ^{ + [BenchManager benchWithTitle:@"toggleDefaultKeyboard" block:^{ + self.inputTextView.keyboardType = UIKeyboardTypeNumbersAndPunctuation; + [self.inputTextView reloadInputViews]; + + self.inputTextView.keyboardType = UIKeyboardTypeDefault; + [self.inputTextView reloadInputViews]; + }]; + }); } - (void)setQuotedReply:(nullable OWSQuotedReplyModel *)quotedReply