parent
15a407de13
commit
9675cbb1e1
|
@ -4180,13 +4180,10 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
|
|||
|
||||
// Canary check in case we later have another reason to set navigationController.delegate - we don't
|
||||
// want to inadvertently clobber it here.
|
||||
OWSAssert(self.navigationController.delegate == nil) self.navigationController.delegate = self;
|
||||
TSMessage *message = (TSMessage *)interaction;
|
||||
MessageDetailViewController *view =
|
||||
[[MessageDetailViewController alloc] initWithViewItem:conversationItem
|
||||
message:message
|
||||
mode:MessageMetadataViewModeFocusOnMetadata];
|
||||
[self.navigationController pushViewController:view animated:YES];
|
||||
OWSAssert(self.navigationController.delegate == nil);
|
||||
self.navigationController.delegate = self;
|
||||
|
||||
[self showMetadataViewForViewItem:conversationItem];
|
||||
} else {
|
||||
OWSFail(@"%@ Can't show message metadata for message of type: %@", self.logTag, [interaction class]);
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ class MessageDetailViewController: OWSViewController, UIScrollViewDelegate {
|
|||
var messageTextProxyViewHeightConstraint: NSLayoutConstraint?
|
||||
var bubbleViewWidthConstraint: NSLayoutConstraint?
|
||||
|
||||
var scrollView: UIScrollView?
|
||||
var scrollView: UIScrollView!
|
||||
var contentView: UIView?
|
||||
|
||||
var attachment: TSAttachment?
|
||||
|
@ -96,11 +96,22 @@ class MessageDetailViewController: OWSViewController, UIScrollViewDelegate {
|
|||
view.setNeedsLayout()
|
||||
view.layoutIfNeeded()
|
||||
|
||||
let contentHeight = scrollView.contentSize.height
|
||||
let scrollViewHeight = scrollView.frame.size.height
|
||||
guard contentHeight >= scrollViewHeight else {
|
||||
// All content is visible within the scroll view. No need to offset.
|
||||
return
|
||||
}
|
||||
|
||||
// We want to include at least a little portion of the message, but scroll no farther than necessary.
|
||||
let showAtLeast: CGFloat = 50
|
||||
let middleCenter = CGPoint(x: bubbleView.frame.origin.x + bubbleView.frame.width / 2,
|
||||
y: bubbleView.frame.origin.y + bubbleView.frame.height - showAtLeast)
|
||||
let offset = bubbleView.superview!.convert(middleCenter, to: scrollView)
|
||||
self.scrollView!.setContentOffset(offset, animated: false)
|
||||
let bubbleViewBottom = bubbleView.superview!.convert(bubbleView.frame, to: scrollView).maxY
|
||||
let maxOffset = bubbleViewBottom - showAtLeast
|
||||
let lastPage = contentHeight - scrollViewHeight
|
||||
|
||||
let offset = CGPoint(x: 0, y: min(maxOffset, lastPage))
|
||||
|
||||
scrollView.setContentOffset(offset, animated: false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue