Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(282)

Unified Diff: ios/clean/chrome/browser/ui/tools/menu_view_controller.mm

Issue 2887263003: [ios clean] ToolsMenu ScrollView and Close Button (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ios/clean/chrome/browser/ui/tools/menu_overflow_controls_stackview.mm ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/clean/chrome/browser/ui/tools/menu_view_controller.mm
diff --git a/ios/clean/chrome/browser/ui/tools/menu_view_controller.mm b/ios/clean/chrome/browser/ui/tools/menu_view_controller.mm
index 5cbc58075070bf0337595e3a41563838605642d4..5e74863f48fb5a520a99c57b01ce45c2dd8fd9d0 100644
--- a/ios/clean/chrome/browser/ui/tools/menu_view_controller.mm
+++ b/ios/clean/chrome/browser/ui/tools/menu_view_controller.mm
@@ -12,6 +12,7 @@
#import "ios/clean/chrome/browser/ui/commands/find_in_page_visibility_commands.h"
#import "ios/clean/chrome/browser/ui/commands/navigation_commands.h"
#import "ios/clean/chrome/browser/ui/commands/tools_menu_commands.h"
+#import "ios/clean/chrome/browser/ui/toolbar/toolbar_button+factory.h"
#import "ios/clean/chrome/browser/ui/toolbar/toolbar_button.h"
#import "ios/clean/chrome/browser/ui/tools/menu_overflow_controls_stackview.h"
#import "ios/clean/chrome/browser/ui/tools/tools_actions.h"
@@ -23,16 +24,28 @@
#endif
namespace {
-const CGFloat kMenuWidth = 250;
-const CGFloat kMenuItemHeight = 48;
+const CGFloat kMenuWidth = 250.0;
+const CGFloat kMenuItemHeight = 48.0;
+const CGFloat kMenuItemLeadingEdgeInset = 10.0;
+const CGFloat kOverflowControlsMargin = 50.0;
+const CGFloat kCloseButtonHeight = 44.0;
}
@interface MenuViewController ()<ToolsActions>
+@property(nonatomic, strong) UIScrollView* menuScrollView;
@property(nonatomic, strong) UIStackView* menuStackView;
@property(nonatomic, strong) NSArray<ToolsMenuItem*>* menuItems;
@property(nonatomic, strong)
MenuOverflowControlsStackView* toolbarOverflowStackView;
@property(nonatomic, assign) BOOL displayOverflowControls;
+@property(nonatomic, strong) ToolbarButton* closeMenuButton;
+
+// Sets up the main StackView and creates a button for each Menu item.
+- (void)setupMenuStackView;
+// Sets up the Overflow navigation controls stack view.
+- (void)setUpOverFlowControlsStackView;
+// Sets up and activates all the View constraints.
+- (void)setupConstraints;
@end
@implementation MenuViewController
@@ -41,10 +54,19 @@ const CGFloat kMenuItemHeight = 48;
@synthesize menuStackView = _menuStackView;
@synthesize toolbarOverflowStackView = _toolbarOverflowStackView;
@synthesize displayOverflowControls = _displayOverflowControls;
+@synthesize menuScrollView = _menuScrollView;
+@synthesize closeMenuButton = _closeMenuButton;
+
+#pragma mark - View Lifecycle
- (void)loadView {
CGRect frame;
- frame.size = CGSizeMake(kMenuWidth, kMenuItemHeight * _menuItems.count);
+ // Set the MenuVC view height depending on the current screen height.
+ CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
+ CGFloat itemsHeight = kMenuItemHeight * _menuItems.count;
+ CGFloat menuHeight =
+ itemsHeight > screenHeight ? screenHeight - kMenuItemHeight : itemsHeight;
+ frame.size = CGSizeMake(kMenuWidth, menuHeight);
frame.origin = CGPointZero;
self.view = [[UIView alloc] initWithFrame:frame];
self.view.backgroundColor = [UIColor whiteColor];
@@ -53,16 +75,35 @@ const CGFloat kMenuItemHeight = 48;
}
- (void)viewDidLoad {
+ self.menuScrollView = [[UIScrollView alloc] init];
+ self.menuScrollView.translatesAutoresizingMaskIntoConstraints = NO;
+ [self.view addSubview:self.menuScrollView];
+
+ // Add close tools menu button. This button is fixed on the top right corner
+ // and will always be visible.
+ self.closeMenuButton = [ToolbarButton toolsMenuToolbarButton];
+ [self.closeMenuButton addTarget:self.dispatcher
+ action:@selector(closeToolsMenu)
+ forControlEvents:UIControlEventTouchUpInside];
+ [self.view addSubview:self.closeMenuButton];
+
+ [self setupMenuStackView];
+ [self setupConstraints];
+}
+
+#pragma mark - UI Setup
+
+- (void)setupMenuStackView {
NSMutableArray<UIButton*>* buttons =
[[NSMutableArray alloc] initWithCapacity:_menuItems.count];
-
// Load menu items.
for (ToolsMenuItem* item in _menuItems) {
UIButton* menuButton = [UIButton buttonWithType:UIButtonTypeSystem];
menuButton.translatesAutoresizingMaskIntoConstraints = NO;
menuButton.tintColor = [UIColor blackColor];
[menuButton setTitle:item.title forState:UIControlStateNormal];
- [menuButton setContentEdgeInsets:UIEdgeInsetsMakeDirected(0, 10.0f, 0, 0)];
+ [menuButton setContentEdgeInsets:UIEdgeInsetsMakeDirected(
+ 0, kMenuItemLeadingEdgeInset, 0, 0)];
[menuButton.titleLabel setFont:[MDCTypography subheadFont]];
[menuButton.titleLabel setTextAlignment:NSTextAlignmentNatural];
[menuButton addTarget:self.dispatcher
@@ -76,7 +117,6 @@ const CGFloat kMenuItemHeight = 48;
[buttons addObject:menuButton];
}
- // Placeholder stack view to hold menu contents.
self.menuStackView = [[UIStackView alloc] initWithArrangedSubviews:buttons];
self.menuStackView.translatesAutoresizingMaskIntoConstraints = NO;
self.menuStackView.axis = UILayoutConstraintAxisVertical;
@@ -89,18 +129,6 @@ const CGFloat kMenuItemHeight = 48;
self.displayOverflowControls) {
[self setUpOverFlowControlsStackView];
}
-
- // Setup constraints.
- [self.view addSubview:self.menuStackView];
- [NSLayoutConstraint activateConstraints:@[
- [self.menuStackView.leadingAnchor
- constraintEqualToAnchor:self.view.leadingAnchor],
- [self.menuStackView.trailingAnchor
- constraintEqualToAnchor:self.view.trailingAnchor],
- [self.menuStackView.bottomAnchor
- constraintEqualToAnchor:self.view.bottomAnchor],
- [self.menuStackView.topAnchor constraintEqualToAnchor:self.view.topAnchor],
- ]];
}
- (void)setUpOverFlowControlsStackView {
@@ -130,7 +158,40 @@ const CGFloat kMenuItemHeight = 48;
[self.toolbarOverflowStackView.leadingAnchor
constraintEqualToAnchor:self.menuStackView.leadingAnchor],
[self.toolbarOverflowStackView.trailingAnchor
- constraintEqualToAnchor:self.menuStackView.trailingAnchor],
+ constraintEqualToAnchor:self.menuStackView.trailingAnchor
+ constant:-kOverflowControlsMargin],
+ ]];
+}
+
+- (void)setupConstraints {
+ [self.menuScrollView addSubview:self.menuStackView];
+ [NSLayoutConstraint activateConstraints:@[
+ // ScrollView Constraints.
+ [self.menuScrollView.leadingAnchor
+ constraintEqualToAnchor:self.view.leadingAnchor],
+ [self.menuScrollView.trailingAnchor
+ constraintEqualToAnchor:self.view.trailingAnchor],
+ [self.menuScrollView.topAnchor constraintEqualToAnchor:self.view.topAnchor],
+ [self.menuScrollView.bottomAnchor
+ constraintEqualToAnchor:self.view.bottomAnchor],
+ // StackView Constraints.
+ [self.menuStackView.leadingAnchor
+ constraintEqualToAnchor:self.menuScrollView.leadingAnchor],
+ [self.menuStackView.trailingAnchor
+ constraintEqualToAnchor:self.menuScrollView.trailingAnchor],
+ [self.menuStackView.bottomAnchor
+ constraintEqualToAnchor:self.menuScrollView.bottomAnchor],
+ [self.menuStackView.topAnchor
+ constraintEqualToAnchor:self.menuScrollView.topAnchor],
+ [self.menuStackView.widthAnchor
+ constraintEqualToAnchor:self.menuScrollView.widthAnchor],
+ [self.menuStackView.heightAnchor
+ constraintEqualToConstant:kMenuItemHeight * self.menuItems.count],
+ // CloseMenu Button Constraints.
+ [self.closeMenuButton.trailingAnchor
+ constraintEqualToAnchor:self.view.trailingAnchor],
+ [self.closeMenuButton.heightAnchor
+ constraintEqualToConstant:kCloseButtonHeight],
]];
}
« no previous file with comments | « ios/clean/chrome/browser/ui/tools/menu_overflow_controls_stackview.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698