* Allow setting a custom height on MDCNavigationBar and MDCButtonBar. Currently, these two components don't respect the height that is used for MDCAppBar, and position the buttons incorrectly when a height other than 56.0f is used. * Make MDCNavigationBar and MDCButtonBar size dynamically instead of exposing an API. * Fix whitespace * Maintain previous functionality by checking size.height > 0 in sizeThatFits: for both MDCNavigationBar and MDCButtonBar.
Button Bars
The Button Bar is a view that represents a list of UIBarButtonItems as horizontally aligned buttons.
Design & API Documentation
Installation
Installation with CocoaPods
To add this component to your Xcode project using CocoaPods, add the following to your Podfile:
pod 'MaterialComponents/ButtonBar'
To add this component along with its themer and other related extensions, please add the following instead:
pod 'MaterialComponents/ButtonBar+Extensions'
Then, run the following command:
pod install
Overview
A Button Bar is similar in concept to a UIToolbar, but Button Bars are not a drop-in API replacement for UIToolbar. Button Bars are slightly more versatile in that one might use a Button Bar to create a Toolbar or a Navigation Bar (left/right button bars).
Button Bar supports a subset of UIBarButtonItem's properties. Learn more by reading the section on UIBarButtonItem properties.
Usage
Importing
Before using Button Bar, you'll need to import it:
Swift
import MaterialComponents
Objective-C
#import "MaterialButtonBar.h"
Create an instance of MDCButtonBar and provide it with an array of UIBarButtonItems.
Swift
let buttonBar = MDCButtonBar()
let actionItem = UIBarButtonItem(
title: "<# title #>",
style: .done, // ignored
target: self,
action: "<# selector #>"
)
buttonBar.items = [actionItem]
let size = buttonBar.sizeThatFits(self.view.bounds.size)
buttonBar.frame = CGRect(x: <# x #>, y: <# y #>, width: size.width, height: size.height)
self.view.addSubview(buttonBar)
Objective-C
MDCButtonBar *buttonBar = [[MDCButtonBar alloc] init];
UIBarButtonItem *actionItem =
[[UIBarButtonItem alloc] initWithTitle:@"<# title #>"
style:UIBarButtonItemStyleDone // ignored
target:self
action:@selector(<# selector #>)];
buttonBar.items = @[ actionItem ];
CGSize size = [buttonBar sizeThatFits:self.view.bounds.size];
CGPoint origin = CGPointZero;
buttonBar.frame = CGRectMake(origin.x, origin.y, size.width, size.height);
[self.view addSubview:buttonBar];
UIBarButtonItem properties
Supported
The following properties are taken into consideration when items is set and the corresponding
buttons are created.
Changes made to properties marked (observed) will be reflected in the corresponding buttons.
title(observed)image(observed)enabled(observed)widthtargetactiontitleTextAttributesForState:
TODO(featherless): File bugs to observe the rest of the properties.
Note: in order to make Button Bar reflect changes to not-observed properties you must clear the
MDCButtonBar instance's items property and reset it, like so:
Swift
actionItem.target = <some other target>
let items = buttonBar.items
buttonBar.items = nil
buttonBar.items = items
Objective-C
actionItem.target = <some other target>;
NSArray *items = buttonBar.items;
buttonBar.items = nil;
buttonBar.items = items;
