Commit 9b812525 authored by Kurt Horimoto's avatar Kurt Horimoto Committed by Commit Bot

[iOS] Fix InfobarModalOverlayCoordinator's |-modalHeightForWidth:|

If the modal view is a scroll view containing content views whose
|-sizeThatFits:| is not implemented, calling |-sizeThatFits:| on the
scroll view will not calculate the same size that it ultimately used
when the contents are laid out.  This resulted in an incorrect size
used for UITableViews with custom cells whose sizing selectors were not
implemented.  Manually triggering a layout pass enusures that all
view resizing resulting from constraint resolution occurs and the
content size is calculated correctly.  While it is not desirable to
manually trigger layout passes, |-modalHeightForWidth:| is only called
once when the InfobarModalOverlayCoordinator is started, so it should
not have any significant performance implications.

Bug: none
Change-Id: I57dfe692a0f439896a08ef6ddecef048a388d003
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2159769
Auto-Submit: Kurt Horimoto <kkhorimoto@chromium.org>
Reviewed-by: default avatarChris Lu <thegreenfrog@chromium.org>
Commit-Queue: Chris Lu <thegreenfrog@chromium.org>
Cr-Commit-Position: refs/heads/master@{#761151}
parent 0c407210
...@@ -66,8 +66,19 @@ ...@@ -66,8 +66,19 @@
#pragma mark - InfobarModalPositioner #pragma mark - InfobarModalPositioner
- (CGFloat)modalHeightForWidth:(CGFloat)width { - (CGFloat)modalHeightForWidth:(CGFloat)width {
CGSize layoutBoundsSize = CGSizeMake(width, CGFLOAT_MAX); UIView* modalView = self.modalViewController.view;
return [self.modalViewController.view sizeThatFits:layoutBoundsSize].height + CGSize modalContentSize = CGSizeZero;
if (UIScrollView* scrollView = base::mac::ObjCCast<UIScrollView>(modalView)) {
CGRect layoutFrame = self.baseViewController.view.bounds;
layoutFrame.size.width = width;
scrollView.frame = layoutFrame;
[scrollView setNeedsLayout];
[scrollView layoutIfNeeded];
modalContentSize = scrollView.contentSize;
} else {
modalContentSize = [modalView sizeThatFits:CGSizeMake(width, CGFLOAT_MAX)];
}
return modalContentSize.height +
CGRectGetHeight(self.modalNavController.navigationBar.bounds); CGRectGetHeight(self.modalNavController.navigationBar.bounds);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment