Index: ios/chrome/browser/ui/first_run/welcome_to_chrome_view.mm |
diff --git a/ios/chrome/browser/ui/first_run/welcome_to_chrome_view.mm b/ios/chrome/browser/ui/first_run/welcome_to_chrome_view.mm |
index b010c60b5a178015fa58ab8665ed856daccaa6f6..c3a7b4c49817343a6fa170932383071145376960 100644 |
--- a/ios/chrome/browser/ui/first_run/welcome_to_chrome_view.mm |
+++ b/ios/chrome/browser/ui/first_run/welcome_to_chrome_view.mm |
@@ -45,7 +45,7 @@ const CGFloat kContainerViewCompactWidthPercentage = 0.8; |
// Layout constants. |
const CGFloat kImageTopPadding[SIZE_CLASS_COUNT] = {32.0, 50.0}; |
const CGFloat kTOSLabelTopPadding[SIZE_CLASS_COUNT] = {34.0, 40.0}; |
-const CGFloat kOptInLabelTopPadding[SIZE_CLASS_COUNT] = {10.0, 14.0}; |
+const CGFloat kOptInLabelPadding[SIZE_CLASS_COUNT] = {10.0, 14.0}; |
const CGFloat kCheckBoxPadding[SIZE_CLASS_COUNT] = {10.0, 16.0}; |
const CGFloat kOKButtonBottomPadding[SIZE_CLASS_COUNT] = {32.0, 32.0}; |
const CGFloat kOKButtonHeight[SIZE_CLASS_COUNT] = {36.0, 54.0}; |
@@ -326,8 +326,10 @@ NSString* const kCheckBoxCheckedImageName = @"checkbox_checked"; |
[self layoutTOSLabel]; |
[self layoutOptInLabel]; |
[self layoutCheckBoxButton]; |
- [self layoutContainerView]; |
+ // The OK Button must be laid out before the container view so that the |
+ // container view can take its position into account. |
[self layoutOKButton]; |
+ [self layoutContainerView]; |
} |
- (void)layoutTitleLabel { |
@@ -398,7 +400,7 @@ NSString* const kCheckBoxCheckedImageName = @"checkbox_checked"; |
- (void)layoutOptInLabel { |
// The opt in label is laid out to the right (or left in RTL) of the check box |
- // button and below |TOSLabel| as specified by kOptInLabelTopPadding. |
+ // button and below |TOSLabel| as specified by kOptInLabelPadding. |
CGSize checkBoxSize = |
[self.checkBoxButton imageForState:self.checkBoxButton.state].size; |
CGFloat checkBoxPadding = kCheckBoxPadding[self.cr_widthSizeClass]; |
@@ -407,7 +409,7 @@ NSString* const kCheckBoxCheckedImageName = @"checkbox_checked"; |
sizeThatFits:CGSizeMake(CGRectGetWidth(self.containerView.bounds) - |
optInLabelSidePadding, |
CGFLOAT_MAX)]; |
- CGFloat optInLabelTopPadding = kOptInLabelTopPadding[self.cr_heightSizeClass]; |
+ CGFloat optInLabelTopPadding = kOptInLabelPadding[self.cr_heightSizeClass]; |
CGFloat optInLabelOriginX = |
base::i18n::IsRTL() ? 0.0f : optInLabelSidePadding; |
self.optInLabel.frame = AlignRectOriginAndSizeToPixels( |
@@ -447,12 +449,18 @@ NSString* const kCheckBoxCheckedImageName = @"checkbox_checked"; |
- (void)layoutContainerView { |
// The container view is resized according to the final layout of |
// |checkBoxButton|, which is its lowest subview. The resized view is then |
- // centered horizontally and vertically. |
+ // centered horizontally and vertically. If necessary, it is shifted up to |
+ // allow |kOptInLabelPadding| between |optInLabel| and |OKButton|. |
CGSize containerViewSize = self.containerView.bounds.size; |
containerViewSize.height = CGRectGetMaxY(self.checkBoxButton.frame); |
- self.containerView.frame = AlignRectOriginAndSizeToPixels(CGRectMake( |
- (CGRectGetWidth(self.bounds) - containerViewSize.width) / 2.0, |
+ |
+ CGFloat padding = kOptInLabelPadding[self.cr_heightSizeClass]; |
+ CGFloat originY = fmin( |
(CGRectGetHeight(self.bounds) - containerViewSize.height) / 2.0, |
+ CGRectGetMinY(self.OKButton.frame) - padding - containerViewSize.height); |
+ |
+ self.containerView.frame = AlignRectOriginAndSizeToPixels(CGRectMake( |
+ (CGRectGetWidth(self.bounds) - containerViewSize.width) / 2.0, originY, |
containerViewSize.width, CGRectGetMaxY(self.checkBoxButton.frame))); |
} |