104.0.0

In this major release we removed the deprecated MDCFloatingActionButtonThemer, added APIs to AppBar flexible header, alert controllers, bottom drawers and sliders to make the more configurable for clients.

Breaking changes

Deleted the MDCFloatingActionButtonThemer class. Use the theming extension.

New features

AppBar added an API for changing the stack view offset. Flexible header added an API for showing the hairline and its color. Availability macro for internal use. AlertControllers added an API for titleIconView.

Bottom drawer added an API for sticky status bars and adjustment when content size changes.

let contentViewController = UIViewController()	let bottomDrawerViewController = MDCBottomDrawerViewController()
...
bottomDrawerVC.shouldIncludeSafeAreaInContentHeight = true
bottomDrawerVC.shouldIncludeSafeAreaInInitialDrawerHeight = true
present(bottomDrawerViewController, animated: true, completion: nil)

Slider added an API for allowAnimatedValueChanges and trackEndsAreRounded or trackEndsAreInset.

API changes

Component changes

ActionSheet

AppBar

Availability

Banner

BottomNavigation

ButtonBar

Buttons

Dialogs

Elevation

FeatureHighlight

FlexibleHeader

List

NavigationDrawer

ProgressView

Slider

TextControls

TextFields

private/TextControlsPrivate

Multi-component changes


103.1.0

This minor release introduces iOS 13 support for BottomNavigation, divider customization for ActionSheet actions, and several bug fixes.

New features

ActionSheet

MDCActionSheetAction has two new APIs, dividerColor and showsDivider. These APIs can be used to show a divider above the action.

action.showsDivider = YES;
action.dividerColor = UIColor.greenColor;

MDCActionSheetController now has a delegate, MDCActionSheetControllerDelegate, that can be used to react to action sheet dismissal.

actionSheet.delegate = self;

- (void)actionSheetControllerDidDismiss:(MDCActionSheetController *)actionSheetController {
  NSLog(@"Did dismiss");
}

BottomNavigation

MDCBottomNavigationBar now supports iOS 13's large content viewer functionality.

Component changes

ActionSheet

AppBar

BottomNavigation

Dialogs

FeatureHighlight

FlexibleHeader

NavigationDrawer

Snackbar

TextControls

TextFields


103.0.0

This major release includes a refactoring of the TextControls libraries, a theming extension for TextFields' underline controller, a bugfix change to Chips imagePadding handling, and the annotation of an AppBar API as to be deprecated.

API changes

TextControls+BaseTextFields

New extension.

TextControls+Enums

New extension.

TextControls+FilledTextFields

New extension.

TextControls+FilledTextFieldsTheming

New extension.

TextControls+OutlinedTextFields

New extension.

TextControls+OutlinedTextFieldsTheming

New extension.

Component changes

AppBar

Chips

TextFields

Multi-component changes


102.0.0

This major hotfix release reverts a change introduced in 101.1.0 that caused Snackbar not to appear in some situations.

Component changes

Snackbar


101.1.1

This release includes a bug fix for Dialogs. In some cases a change in preferredContentSize did not correctly trigger a layout of an Alert's subviews.

Component changes

Dialogs


101.1.0

This minor release improves tvOS support for Buttons and Snackbar, annotates some AppBar APIs as to-be-deprecated, and fixes a bug in the NavigationDrawer.

New features

tvOS support is being added to some of our components.

Component changes

AppBar

Buttons

Chips

NavigationDrawer

Snackbar


101.0.1

In this patch release we reverted Snackar's display accessibility level from UIAccessibilityScreenChangedNotification to UIAccessibilityLayoutChangedNotification, as it caused in some cases an unwanted immediate focus shift for VoiceOver users.

Component changes

Snackbar


101.0.0

In this major release we deleted the class MDCFlexibleHeaderColorThemer and deprecated the MDCHeaderStackViewColorThemer. As well as allowing the NavigationDrawer to account for the bottom safe area in presentation, improvements to our BUILD files, touch targets on TextFields and our TextControl examples and documentation.

Breaking changes

The MDCFlexibleHeaderColorThemer no longer exists.

New deprecations

We deprecated MDCHeaderStackViewColorThemer. No current replacement exists.

New features

In order to account for the bottom safe area in presentation of a MDCBottomDrawerViewController we added a behavioral flag shouldIncludeSafeAreaInInitialDrawerHeight.

  MDCBottomDrawerViewController *bottomDrawer =
      [[MDCBottomDrawerViewController alloc] init];
  bottomDrawer.shouldIncludeSafeAreaInInitialDrawerHeight = YES;

API changes

HeaderStackView

deprecated class: MDCHeaderStackViewColorThemer, no replacement exists.

NavigationDrawer

new property: shouldIncludeSafeAreaInInitialDrawerHeight in MDCBottomDrawerPresentationController.

new property: shouldIncludeSafeAreaInInitialDrawerHeight in MDCBottomDrawerViewController.

Component changes

Cards

FlexibleHeader

HeaderStackView

NavigationDrawer

Snackbar

TextControls

TextFields

Typography

Multi-component changes


100.1.0

In this minor release we addressed a bug in MDCSnackbar where the Snackbar would not read the accessibilityHint.

Component changes

Snackbar


100.0.1

In this patch release we addressed a bug in MDCSnackbar where the Snackbar would not clipToBounds if the legacy behavior was enabled.

Component changes

Snackbar


100.0.0

In this major release we made a breaking change improvement to Ink’s inkColor API. As well as improvements including customization Dialogs presentation animation, Flexible Header behavior around safe area. Also, we addressed bugs in Snackbar and TextFields.

Breaking changes

The inkColor in MDCInkView is now null_resettable.

New features

Dialogs

We added the ability to customize MDCAlertController presentation animation.

let alertController = MDCAlertController()
alertController.presentationOpacityAnimationDuration = 0.5
alertController.presentationScaleAnimationDuration = 0.25
alertController.presentationInitialScaleFactor = 0.7
MDCAlertController *alertController = [[MDCAlertController alloc] init];
alertController.presentationOpacityAnimationDuration = 0.5;
alertController.presentationScaleAnimationDuration = 0.25;
alertController.presentationInitialScaleFactor = 0.7;

FlexibleHeader

We added a new runtime flag permitInferringTopSafeAreaFromTopLayoutGuideViewController to address a crash that was occurring in certain configurations.

When disabled, if both inferTopSafeAreaInsetFromViewController and topLayoutGuideAdjustmentEnabled are set to YES, and the view controller selected to extract the safe area inset from (either automatically or via the delegate) is the same as topLayoutGuideViewController, the app will crash.

When enabled, the app will not crash in the situation described above. This is only supported on iOS 11+.

Enable this property before setting inferTopSafeAreaInsetFromViewController or topLayoutGuideViewController.

let flexibleHeader = MDCFlexibleHeaderViewController()
flexibleHeader.permitInferringTopSafeAreaFromTopLayoutGuideViewController = true
MDCFlexibleHeaderViewController *flexibleHeader = [[MDCFlexibleHeaderViewController alloc] init];
flexibleHeader.permitInferringTopSafeAreaFromTopLayoutGuideViewController = YES;

API changes

Dialogs

new property: presentationOpacityAnimationDuration in MDCAlertController.

new property: presentationScaleAnimationDuration in MDCAlertController.

new property: presentationInitialScaleFactor in MDCAlertController.

FlexibleHeader

new property: permitInferringTopSafeAreaFromTopLayoutGuideViewController in MDCFlexibleHeaderViewController.

Ink

modified property: inkColor in MDCInkView to be null_resettable.

Component changes

ActionSheet

Banner

Dialogs

FlexibleHeader

Ink

Snackbar

Tabs

TextControls

TextFields

Multi-component changes


99.0.2

This patch release is an empty release intended solely to connect stable to develop's ancestry.


99.0.1

This patch release is an empty release intended solely to re-connect the develop and stable branch histories.

99.0.0

In this major release we deleted and deprecated numerous APIs in ButtonBar, FeatureHighlight, List, Tabs, TextFields and Flexible Header. We fixed layout issues in Dialogs and BottomAppBar, and added support for non-transient Snackbars.

New features

Snackbar

We added an opt-in flag to ignore the default timeout and allow Snackbars to persist until an action is made upon it:

let snackBarMessage = MDCSnackbarMessage(text: "Message text")
snackBarMessage.automaticallyDismisses = false
MDCSnackbarMessage *snackBarMessage = [MDCSnackbarMessage messageWithText:@"Message text"];
snackBarMessage.automaticallyDismisses = NO;

New deprecations

ButtonBar

FeatureHighlight

List

Tabs

TextFields

Multi-component changes

Component changes

BottomAppBar

Cards

Chips

Dialogs

List

Snackbar


98.0.0

In this major release we deleted and deprecated numerous APIs in ActionSheet, BottomNavigation, Cards, List. Fix issue with unbounded ink. NavigationDrawer now allows its trackingScrollView to be resettable.

Breaking changes

ActionSheet

Delete inkColor and enableRippleBehavior from MDCActionSheetItemTableViewCell

BottomNavigation

Delete MDCBottomNavigationBarTypographyThemer

New deprecations

List

Deprecate MDCListColorThemer

Deprecate MDCListTypographyThemer

API changes

BottomNavigation

removed class: MDCBottomNavigationBarTypographyThemer. Please use the Theming extension instead.

List

deprecated class: MDCListColorThemer. Please use MaterialList+Theming instead.

deprecated class: MDCListTypographyThemer. Please use MDCSelfSizingStereoCell+MaterialTheming instead. (Note: Typography theming is no longer available as an independent API.)

Component changes

ActionSheet

Banner

BottomNavigation

Cards

Ink

List

NavigationDrawer

Tabs

Multi-component changes


97.0.1

This hotfix patch release fixes the podspec. The previous release forgot to remove deleted references to card themers.


97.0.0

In this major release we deleted and deprecated numerous APIs in ActionSheet, BottomNavigation, ButtonBar, Cards, Feature highlight, Ink, Page control, Snackbar, TextField, and Tabs. We also fixed Chip padding for Material theming.

Breaking changes

ActionSheet

Delete inkColor and enableRippleBehavior properties.

BottomNavigation

Delete MDCBottomNavigationBarColorThemer

Cards

Delete MDCCardsColorThemer Delete MDCCardsShapeThemer

FeatureHighlight

Delete MDCFeatureHighlightFontThemer

Ink

Delete MDCInkColorThemer

List

Delete MDCListThemer

PageControl

Delete MDCPageControlColorThemer

ProgressView

Delete MDCProgressViewColorThemer

Snackbar

Delete MDCSnackbarColorThemer

Tabs

Delete MDCTabBarFontThemer

TextFields

Delete MDCTextFieldFontThemer

New deprecations

Buttons

Deprecate MDCButtonColorThemer Deprecate MDCFloatingActionButtonThemer Deprecate MDCTextButtonThemer Deprecating MDCButtonScheme Deprecating MDCButtonShapeThemer Deprecating MDCButtonTypographyThemer Deprecating MDCContainedButtonThemer Deprecating MDCOutlinedButtonThemer

Cards

Delete Themer classes

FeatureHighlight

Deprecate MDCFeatureHighlightTypographyThemer

NavigationDrawer

Deprecate MDCBottomDrawerColorTHemer

TextFields

Deprecate MDCTextFieldTypographyThemer Deprecate MDCOutlinedTextFieldColorThemer

API changes

ActionSheet

removed property: inkColor in MDCActionSheetController. Use rippleColor instead.

removed property: enableRippleBehavior in MDCActionSheetController. Use ripple.

Navigation Bar

removed class: MDCBottomNavigationBarColorThemer. Use MaterialBottomNavigation+Theming instead.

Buttons

deprecated protocol: MDCButtonScheming. Please use MDCContainerScheming.

deprecated class: MDCButtonScheme. Please use MDCContainerScheming.

deprecated class: MDCContainedButtonThemer. Please use MDCButton:applyContainedThemeWithScheme: instead.

deprecated class: MDCFloatingActionButtonThemer. Please use [MDCFloatingButton applySecondaryThemeWithScheme:] instead.

deprecated class: MDCOutlinedButtonThemer. Please use MDCButton:applyOutlinedThemeWithScheme: instead.

deprecated class: MDCTextButtonThemer. Please use MDCButton:applyTextThemeWithScheme: instead.

deprecated class: MDCButtonColorThemer. Please use the MDCButton+MaterialTheming API instead.

deprecated class: MDCButtonShapeThemer. Please use MDCButton+MaterialTheming instead. (Note: Shape theming is no longer available as an independent API.).

deprecated class: MDCButtonTypographyThemer. Please use MDCButton+MaterialTheming instead. (Note: Typography theming is no longer available as an independent API.).

Cards

removed protocol: MDCCardScheming. MDCCardScheming was made obsolete by theming with MDCContainerSchemes.

removed class: MDCCardScheme. MDCCardScheming was made obsolete by theming with MDCContainerSchemes.

removed class: MDCCardThemer. Please use MaterialCards+Theming instead.

removed class: MDCCardsColorThemer. Please use MaterialCards+Theming instead. removed class: MDCCardsShapeThemer. Please use MaterialCards+Theming instead.

FeatureHighlight

removed class: MDCFeatureHighlightFontThemer. No replacement exists. Please comment on https://github.com/material-components/material-components-ios/issues/7172 in order to indicate interest in a replacement API. deprecated class: MDCFeatureHighlightTypographyThemer. No replacement exists. Please comment on https://github.com/material-components/material-components-ios/issues/7172 in order to indicate interest in a replacement API.

Ink

removed class: MDCInkColorThemer. Please use Ripple instead.

List

removed class: MDCListScheming. Please use MDCContainerScheme APIs. removed class: MDCListScheme. Please use MDCContainerScheme APIs. removed class: MDCListThemer. Please use MDCContainerScheme APIs.

BottomDrawer

deprecated class: MDCBottomDrawerColorThemer. No replacement exists. Please comment on https://github.com/material-components/material-components-ios/issues/7172 in order to indicate interest in a replacement API.

Page Control

removed class: MDCPageControlColorThemer. No replacement exists. Please comment on https://github.com/material-components/material-components-ios/issues/7172 in order to indicate interest in a replacement API.

ProgressView

removed class: MDCProgressViewColorThemer. No replacement exists. Please comment on https://github.com/material-components/material-components-ios/issues/7172 in order to indicate interest in a replacement API.

Snackbar

removed class: MDCSnackbarColorThemer. Please use the Theming extension instead.

Tab Bar

removed class: MDCTabBarFontThemer. Please use the theming extension instead.

TextField

deprecated class: MDCOutlinedTextFieldColorThemer. Please use the Theming extension on MDCTextInputControllerOutlined instead.

removed class: MDCTextFieldFontThemer. Please use the Theming extension, or MDCTextControls and their theming extensions instead.

deprecated class: MDCTextFieldTypographyThemer. Please use MDCTextInputControllerFilled+MaterialTheming.h or MDCTextInputControllerOutlined+MaterialTheming.h instead.

Thumb Track

removed property: thumbMaxRippleRadius in MDCThumbTrack. Opt-in to Ripple by setting enableRippleBehavior to YES, and then use thumbRippleMaximumRadius instead. Learn more at https://github.com/material-components/material-components-ios/tree/develop/components/Ink#migration-guide-ink-to-ripple

Component changes

Changes

ActionSheet

Banner

BottomNavigation

Buttons

Chips

Dialogs

FeatureHighlight

Ink

List

NavigationDrawer

PageControl

ProgressView

Snackbar

Tabs

TextFields

private/ThumbTrack

Multi-component changes


96.0.0

In this major release we deleted and deprecated a bunch of APIs in BottomAppBar, Snackbar, TextField, ActionSheet, BottomNavigation, ButtonBar, Cards, Feature highlight, Ink, Page control, and Tabs. We also enables ripple by default on Action Sheet. It was using a legacy ink animation.

Breaking changes

BottomAppBar

Delete deprecated MDCBottomAppBarColorThemer

Snackbar

Delete snackbarMessageViewTextColor

TextField

Delete MDCTextFieldColorThemer

New deprecations

ActionSheet

Deprecated inkColor. Use the ripple APIs.

BottomNavigation

Deprecate MDCBottomNavigationTypography themer

ButtonBar

Deprecate MDCButtonBarColorThemer

Button

Deprecate MDCFloatingButtonShapeThemer

Cards

Deprecate MDCCardThemer

Feature highlight

Deprecate MDCFeatureHighlightFontThemer

Ink

Deprecate MDCInkColorThemer

Page Control

Deprecate-MDCPageControlColorThemer-applyColorScheme-toPageContro

Snackbar

Deprecate MDCSnackbarColorThemer

Tabs

Deprecate MDCTabBarColorThemer

TextFields

Deprecate MDCTextFieldFontThemer

New features

Chips

ChipFieldShouldBeginEditing method to MDCChipFieldDelegate to control if editing is allowed.

- (BOOL)chipFieldShouldBeginEditing:(MDCChipField *)chipField {
  return YES;
}

Snackbar

Adds elementToFocusOnDismiss to MDCSnackbarMessage so a client can specify a view to focus on after the snackbar message is dismissed.

snackBarMessage.elementToFocusOnDismiss = view;

API changes

ActionSheet

deprecated property: inkColor in MDCActionSheetController. Use rippleColor instead.

deprecated property: enableRippleBehavior in MDCActionSheetController. Use ripple.

BottomAppBar

deprecated class: MDCBottomAppBarColorThemer. No replacement exists. Please comment on https://github.com/material-components/material-components-ios/issues/7172 in order to indicate interest in a replacement API.

BottomNavigationBar

deprecated class: MDCBottomNavigationBarTypographyThemer. Please use the Theming extension instead.

ButtonBar

deprecated class: MDCButtonBarColorThemer. ButtonBar is not intended to be themed as a standalone component. Please theme it via the AppBar component's Theming extension instead.

Button

deprecated class: MDCFloatingButtonShapeThemer. Please use [MDCFloatingButton applySecondaryThemeWithScheme:] instead. (Note: Shape theming is no longer available as an independent API.

Cards

deprecated protocol: MDCCardScheming. MDCCardScheming was made obsolete by theming with MDCContainerSchemes.

deprecated class: MDCCardScheme. MDCCardScheming was made obsolete by theming with MDCContainerSchemes.

deprecated class: MDCCardThemer. Please use MaterialCards+Theming instead.

ChipField

new method: -chipFieldShouldBeginEditing: in MDCChipFieldDelegate. Asks the delegate if editing should begin in the specified chip field.

FeatureHighlight

deprecated class: MDCFeatureHighlightFontThemer. No replacement exists. Please comment on https://github.com/material-components/material-components-ios/issues/7172 in order to indicate interest in a replacement API.

Ink

deprecated class: MDCInkColorThemer. Please use Ripple instead.

Page Control

deprecated class: MDCPageControlColorThemer. No replacement exists. Please comment on https://github.com/material-components/material-components-ios/issues/7172 in order to indicate interest in a replacement API.

Snackbar

removed property: snackbarMessageViewTextColor in MDCSnackbarMessageView. Use messsageTextColor instead.

deprecated class: MDCSnackbarColorThemer. No replacement exists. Please comment on https://github.com/material-components/material-components-ios/issues/7172 in order to indicate interest in a replacement API.

new property: elementToFocusOnDismiss in MDCSnackbarMessage. Element to focus on snackbar message dismiss. Focuses the first element on screen after dismiss by default. The focus will change to the element only if the focus is on the snackbar message.

Tabs

deprecated class: MDCTabBarColorThemer. Please use the Theming extension instead.

Component changes

ActionSheet

Banner

BottomNavigation

ButtonBar

Buttons

Cards

Chips

Dialogs

FeatureHighlight

Ink

List

PageControl

Snackbar

Tabs

TextFields

Multi-component changes


95.0.1

In this hotfix we revert c83333f to address issue where dialog messages are not properly displayed during rotation while VoiceOver is on.

Component changes

Changes

Dialogs


95.0.0

In this major release we deleted a bunch of APIs already marked deprecated in the Button Bar, Button, Ink, Chip componnts.

Breaking changes

Button

MDCButton removed cornerRadius.

Chips

We removed a bunch of themer classes and protocols that are not part of our latest theming offering.

New deprecations

Navigation Bar

We deprecated the color themer in preperation of deleting it. Use theming instead.

Outlined Button

We deprecated the color themer in preperation of deleting it. Use theming instead.

Text Button

We deprecated the color themer in preperation of deleting it. Use theming instead.

Cards

We deprecated the color themer in preperation of deleting it. Use theming instead.

Tab Bar

We deprecated the color themer in preperation of deleting it. Use theming instead.

Text Field

We deprecated the color themer in preperation of deleting it. Use theming instead.

Thumb Track

We deprecated the private thumbtrack component's thumbMaxRippleRadius.

API changes

MDCButton

removed property: cornerRadius in MDCButton

Chips

removed protocol: MDCChipViewScheming. Use Chips+Theming instead.

removed class: MDCChipViewThemer. Use Chips+Theming instead.

removed class: MDCChipViewColorThemer. Use Chips+Theming instead.

removed class: MDCChipViewFontThemer. Use Chips+Theming instead.

removed class: MDCChipViewShapeThemer. Use Chips+Theming instead.

removed class: MDCChipViewTypographyThemer. Use Chips+Theming instead.

Navigation Bar

deprecated class: MDCBottomNavigationBarColorThemer. Use MaterialBottomNavigation+Theming instead.

Outlined Button

deprecated class: MDCOutlinedButtonColorThemer. Please use [MDCButton applyOutlinedThemeWithScheme:] instead. (Note: Color theming is no longer available as an independent API.

Text Button

deprecated class: MDCTextButtonColorThemer. Please use [MDCButton applyTextThemeWithScheme:] instead. (Note: Color theming is no longer available as an independent API.)")

Cards

deprecated class: MDCCardsColorThemer. Please use MaterialCards+Theming instead.

Tab Bar

deprecated class: MDCTabBarFontThemer. Please use the theming extension instead.

Text Field

deprecated class: MDCTextFieldColorThemer. Please use the MaterialTextFields+Theming instead.

Thumb Track

deprecated property: thumbMaxRippleRadius in MDCThumbTrack. Opt-in to Ripple by setting enableRippleBehavior to YES, and then use thumbRippleMaximumRadius instead. Learn more at https://github.com/material-components/material-components-ios/tree/develop/components/Ink#migration-guide-ink-to-ripple

Component changes

Changes

Banner

BottomNavigation

ButtonBar

Buttons

Cards

Chips

Ink

Tabs

TextFields

private/ThumbTrack

Multi-component changes


94.5.0

This minor release introduces new APIs to AppBar, FlexibleHeader and Dialogs. AppBar and FlexibleHeader adds behavior to mimic the behavior of UINavigationController's setNavigationBarHidden:. Dialogs exposes transition APIs to customize the presentation animations. We also deprecated some themers for Chips and Buttons.

New deprecations

Chips

####MDCChipViewColorThemer

Use Chips+Theming to theme the ChipView instead.

####MDCChipViewShapeThemer

Use Chips+Theming to theme the ChipView instead.

Buttons

MDCFloatingButtonColorThemer

Please use [MDCFloatingButton applySecondaryThemeWithScheme:] instead.

MDCContainedButtonColorThemer

Please use [MDCButton applyContainedThemeWithScheme:] instead.

New features

###AppBar

The new shouldSetNavigationBarHiddenHideAppBar flag allows view controllers to control the visibility of their app bar via the standard UINavigationController setNavigationBarHidden: APIs

    let contentViewController = PresentedViewController()
    let navigationController = MDCAppBarNavigationController()
    navigationController.shouldSetNavigationBarHiddenHideAppBar = true
    navigationController.delegate = self
    navigationController.pushViewController(contentViewController, animated: false)

###FlexibleHeader

This new shift behavior mode enables the flexible header to mimic the behavior of UINavigationController's setNavigationBarHidden:.

Swift

headerViewController.headerView.shiftBehavior = .hideable
// You can now toggle visibility of the header view using the following invocations:
headerViewController.headerView.shiftHeaderOffScreen(animated: true)
headerViewController.headerView.shiftHeaderOnScreen(animated: true)
override func childViewControllerForStatusBarHidden() -> UIViewController? {
  return headerViewController
}

Objective-C

headerViewController.headerView.shiftBehavior = MDCFlexibleHeaderShiftBehaviorHideable;
// You can now toggle visibility of the header view using the following invocations:
[headerViewController.headerView shiftHeaderOffScreenAnimated:YES];
[headerViewController.headerView shiftHeaderOnScreenAnimated:YES];
- (UIViewController *)childViewControllerForStatusBarHidden {
  return _headerViewController;
}

API changes

AppBar

new property: navigationBarHidden in MDCAppBarNavigationController new property: `shouldSetNavigationBarHiddenHideAppBar;

Chips

deprecated class: MDCChipViewColorThemer. Use Chips+Theming instead. deprecated class: MDCChipViewShapeThemer. Use Chips+Theming instead.

Dialogs

new property: dialogTransform in MDCDialogPresentationController

new property: opacityAnimationDuration in MDCDialogTransitionController new property: scaleAnimationDuration in MDCDialogTransitionController new property: dialogInitialScaleFactor in MDCDialogTransitionController

Flexible header

new enum value: MDCFlexibleHeaderShiftBehaviorHideable in MDCFlexibleHeaderShiftBehavior

Ripple

new property: usesSuperviewShadowLayerAsMask in MDCRippleView

Component changes

Changes

ActionSheet

AppBar

Banner

Buttons

Chips

Dialogs

FlexibleHeader

Ripple


94.4.0

This minor release introduces new APIs to ActionSheet, BottomSheet and FlexibleHeader. Additionally, it includes new theming extensions for TextControls component.

New features

TextControls component now has theming extensions.

MDCFilledTextField *filledTextField = [[MDCFilledTextField alloc] init];
MDCContainerScheme *containerScheme = [[MDCContainerScheme alloc] init];

[filledTextField applyThemeWithScheme:containerScheme];
let filledTextField = MDCFilledTextField()
let scheme = MDCContainerScheme()

filledTextField.applyTheme(withScheme: scheme)

API changes

ActionSheet

MDCActionSheetController

new property: contentEdgeInsets in MDCActionSheetController

BottomSheet

MDCBottomSheetController

new property: dismissOnDraggingDownSheet in MDCBottomSheetController

MDCBottomSheetPresentationController

new property: dismissOnDraggingDownSheet in MDCBottomSheetPresentationController

MDCBottomSheetTransitionController

new property: dismissOnDraggingDownSheet in MDCBottomSheetTransitionController

FlexibleHeader

MDCFlexibleHeaderView(ShiftBehavior)

new property: shiftedOffscreen in MDCFlexibleHeaderView(ShiftBehavior)

Component changes

Changes

ActionSheet

BottomSheet

Buttons

FeatureHighlight

FlexibleHeader

ShadowElevations

TextControls


94.3.0

This minor release primarily consists of accessibility improvements. A number of components now provide increased support for VoiceOver and Dynamic Type, and many components have been audited to make sure minimum touch target requirements and minimum color contrast requirements are met. Additionally, many examples in our Catalog and Dragons apps have been improved from an accessibility standpoint.

New deprecations

  • adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in MDCSnackbarManager

  • adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in MDCSnackbarMessageView

Component changes

ActionSheet

ActivityIndicator

AppBar

Banner

BottomNavigation

BottomSheet

ButtonBar

Buttons

Cards

Chips

Dialogs

FeatureHighlight

Ink

List

NavigationDrawer

PageControl

ProgressView

Ripple

ShadowElevations

ShadowLayer

Slider

Snackbar

Tabs

TextControls

TextFields

Typography

schemes/Typography

Multi-component changes


94.2.0

This minor release introduces new APIs to MDCAppBarViewController and MDCSlider. Additionally, it includes some fixes for Banner constraints.

New Features

AppBar

MDCAppBarViewController allows automatically adjust the height of the app bar based on its headerStackView.

Objective-C

MDCAppBarViewController *appBar= [[MDCAppBarViewController alloc] init];
appBar.shouldAdjustHeightBasedOnHeaderStackView = YES;

Swift

let appBar = MDCAppBarViewController()
appBar.shouldAdjustHeightBasedOnHeaderStackView = true

Slider

MDCSlider allows having a continuous Slider that shows track tick marks.

Objective-C

MDCSlider *slider = [[MDCSlider alloc] init];
slider.discrete = NO;
slider.numberOfDiscreteValues = 5;

Swift

let slider = MDCSlider()
slider.discrete = false
slider.numberOfDiscreteValues = 5;

API changes

AppBar

MDCAppBarViewController

new property: shouldAdjustHeightBasedOnHeaderStackView in MDCAppBarViewController

Slider

MDCSlider

new property: discrete in MDCSlider

Component changes

AppBar

Banner

Slider


94.1.0

This minor release introduces new APIs to FlexibleHeader and Ripple, and updates the appearance of MDCSnackbar to the latest style. The release also includes bug fixes for multiple components.

New Features

FlexibleHeader

FlexibleHeader can now inform the receiver that its view's tracking scroll view has changed through the flexibleHeaderView:didChangeTrackingScrollViewAnimated: API. Example:

Swift

class MyAnimationDelegate: NSObject, MDCFlexibleHeaderViewAnimationDelegate {
  func flexibleHeaderView(_ flexibleHeaderView: MDCFlexibleHeaderView,
                          didChangeTrackingScrollViewAnimated animated: Bool) {
  if animated {
    // ...
  }
}

Objective-C

-(BOOL)flexibleHeaderView:(MDCFlexibleHeaderView *)flexibleHeaderView
	didChangeTrackingScrollViewAnimated:(BOOL)animated {
  if (animated) {
    // ...
  }
}

Additionally, you can now animate your own changes alongside the default animations of the flexible header, by passing an animation sequence and a completion block to animateWithAnimations:completion:. Example:

Swift

myHeaderView.animate(animations: {
  scrollView.contentOffset = CGPoint(x: 0, y: -100)
  myHeaderView.maximumHeight = 100
})

Objective-C

[myHeaderView animate:^{
  scrollView.contentOffset = CGPointMake(0, -100.f);
  myHeaderView.maximumHeight = 100.f;
}];

Component changes

ActionSheet

Banner

FlexibleHeader

Ripple

Snackbar

TextFields


94.0.0

This major release adds a new configuration block to MDCSnackBarMessage and moves the currently in development MDCTextControl based TextFields from the TextFields component directory to their own TextControls directory. While there are no API changes associated with this move, it does have the potential to break anyone importing these textfields from their old location, hence the major version bump.

New features

MDCSnackBarMessage now provides a block that is called before the message is presented. This allows clients to perform last minute configurations.

Objective-C

MDCSnackbarMessage *message = [[MDCSnackbarMessage alloc] init];
message.snackbarMessageWillPresentBlock =
  ^(MDCSnackbarMessage *snackbarMessage, MDCSnackbarMessageView *messageView) {
      // Configure snackbar message.
    };
[MDCSnackbarManager showMessage:message];

Swift

let message = MDCSnackbarMessage()
message.snackbarMessageWillPresentBlock = { snackbarMessage, messageView in
  // Configure snackbar message.
}
MDCSnackbarManager.showMessage(message)

Component changes

TextControls

Snackbar


93.5.0

This minor release introduces new APIs for Slider. The track height and the visibility of track tick marks can be customized.

New features

MDCSlider allows customization of the track height.

Objective-C

MDCSlider *slider = [[MDCSlider alloc] init];
slider.trackHeight = 4;

Swift

let slider = MDCSlider()
slider.trackHeight = 4

MDCSlider also allows controlling the display of the track tick marks for continuous and discrete sliders. Setting this property disables the automatic conversion of a slider to “discrete” when setting numberOfDiscreteValues.

Objective-C

MDCSlider *slider = [[MDCSlider alloc] init];
// Track tick marks are always shown. Remains a continuous slider.
slider.trackTickVisibility = MDCSliderTrackTickVisibilityAlways;
slider.minimumValue = 0;
slider.maximumValue = 100;
// Show tick marks at 0, 10, 20, ..., 100
slider.numberOfDiscreteValues = 11;

Swift

let slider = MDCSlider()
// Track tick marks are always shown. Remains a continuous slider.
slider.trackTickVisibility = .always
slider.minimumValue = 0;
slider.maximumValue = 100;
// Show tick marks at 0, 10, 20, ..., 100
slider.numberOfDiscreteValues = 11;

Component changes

ThumbTrack

Multi-component changes


93.4.0

This minor release adds a new Filled and Outlined TextFields that will eventually replace MDCTextField's filled and outlined controllers. Additionally, it fixes dynamic type issues for multiple components, and removes deprecated themers.

New features

TextFields

Component changes

ActivityIndicator

Dialogs

TextFields

FlexibleHeader

Slider

ThumbTrack

Multi-component changes


93.3.0

This minor release adds two new APIs to FlexibleHeader for contexts involving multiple tracking scroll views (such as tabbed interfaces).

New features

MDCFlexibleHeaderView has a new API, allowShadowLayerFrameAnimationsWhenChangingTrackingScrollView, that can be used to enable shadow layer frame animations when the header's height is animated after switching to a new tracking scroll view. This flag is false by default, but will be enabled and then deleted in the future, so please consider enabling it wherever you instantiate a flexible header or app bar.

MDCFlexibleHeaderView has a new animationDelegate API that can be used to react to the completion of the animation that occurs when changing tracking scroll views.

Component changes

FlexibleHeader


93.2.0

In this minor release TextFields support multiline error/helper text, FeatureHighlight supports Dynamic Type, OverlayWindow supports iOS 13 UIWindow scene initializer API, along with a PageControl dot placement fix, and additional component testing.

New features

FeatureHighlight

You can now set adjustsFontForContentSizeCategory on MDCFeatureHighlightViewController to automatically update your scalable font when content size category changes. Namely, when adjustsFontForContentSizeCategory is set to YES the title and body fonts will scale appropriately if given a scalable font.

OverlayWindow

MDCOverlayWindow now supports being initialized with initWithWindowScene: as part of the new UIWindow iOS 13 APIs.

TextFields

MDCTextField now supports multiline error and helper texts. To set this up you will need to change the number of lines and word wrapping of the label:

MDCTextField *textField = [[MDCTextField alloc] init];
textField.leadingUnderlineLabel.numberOfLines = 0;
textField.leadingUnderlineLabel.lineBreakMode = NSLineBreakByWordWrapping;

API changes

Component changes

Changes

Banner

Buttons

Cards

Chips

Dialogs

FeatureHighlight

FlexibleHeader

List

OverlayWindow

PageControl

ShadowLayer

TextFields


93.1.1

This patch hotfix release addresses a bug in NavigationDrawer where the scrim is visible when the drawer's trackingScrollView is scrolled to the end of the content.

Changes

NavigationDrawer


93.1.0

This minor hotfix release deprecates the buttonFont API of MDCAlertController.

New deprecations

The buttonFont API on MDCAlertController is being deprecated and will soon be removed. Clients should instead use buttonForAction: to access and theme each button as desired.

Objective-C

for (MDCAlertAction *action in self.actions) {
  MDCButton *button = [self buttonForAction:action];
  // Perform button customization
}

API changes

Dialogs

MDCAlertController

modified property: buttonFont in MDCAlertController

Type of change:Deprecation message
From:``
To:Please use buttonForAction: to set button properties.

modified property: buttonFont in MDCAlertController

Type of change:Deprecation
From:0
To:1

Changes

Dialogs


93.0.0

This major release deletes MaskedTransition, fixes bugs in ActionSheet, and adds an API to Buttons related to fonts.

Breaking changes

MaskedTransition has been deleted.

Changes

ActionSheet

Buttons

Chips

Dialogs

Tabs


92.5.0

This minor release prepares MDCButton for the deprecation and removal of its titleFont:forState: APIs in a future release.

Changes

Buttons


92.4.0

This minor release addresses issues with Dialogs in Dark Mode, adds delegate methods for Navigation Drawer, and makes Outlined Text Areas more configurable.

New deprecations

This minor release deprecates Chips+ChipThemer and MDCChipViewFontThemer.

New features

MDCTextInputControllerOutlinedTextArea now allows users to specify minimumLines and expandsOnOverflow.

MDCTextInputControllerOutlinedTextArea *textInputControllerOutlinedTextArea =
    [[MDCTextInputControllerOutlinedTextArea alloc] initWithTextInput:self.textField];
textInputControllerOutlinedTextArea.minimumLines = 1;
textInputControllerOutlinedTextArea.expandsOnOverflow = YES;
let textInputControllerOutlinedTextArea =
    MDCTextInputControllerOutlinedTextArea(textInput: textField)
textInputControllerOutlinedTextArea.minimumLines = 1
textInputControllerOutlinedTextArea.expandsOnOverflow = true

MDCBottomDrawerPresentationControllerDelegate has new methods that allow clients to respond to animation lifecycle events and touches to the scrim.

Touch events set to delegate

Touch events are propagated to delegate to allow clients to interpret touches in the scrim area.

navigationDrawer.dismissOnBackgroundTap = NO;
navigationDrawer.shouldForwardTouchEvents = YES;
...
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
}
navigationDrawer.dismissOnBackgroundTap = false
navigationDrawer.shouldForwardTouchEvents = true
...
override public func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
}
public override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
}

Animation events sent to delegate

The animation lifecycle events are forwarded to the delegate so that clients can respond to them.

- (void)bottomDrawerControllerWillTransitionOpen:(nonnull MDCBottomDrawerViewController *)controller
                                 withCoordinator:
                                     (nullable id<UIViewControllerTransitionCoordinator>)
                                         transitionCoordinator
                                   targetYOffset:(CGFloat)targetYOffset {
}

- (void)bottomDrawerControllerDidEndOpenTransition:(MDCBottomDrawerViewController *)controller {
}

- (void)
    bottomDrawerControllerWillTransitionClosed:(nonnull MDCBottomDrawerViewController *)controller
                               withCoordinator:(nullable id<UIViewControllerTransitionCoordinator>)
                                                   transitionCoordinator
                                 targetYOffset:(CGFloat)targetYOffset {
}

- (void)bottomDrawerControllerDidEndCloseTransition:(MDCBottomDrawerViewController *)controller {
}

- (void)bottomDrawerControllerDidChangeTopYOffset:
            (nonnull MDCBottomDrawerViewController *)controller
                                          yOffset:(CGFloat)yOffset {
}
public func bottomDrawerControllerWillTransitionOpen(_ controller: MDCBottomDrawerViewController, with transitionCoordinator: UIViewControllerTransitionCoordinator?, targetYOffset:CGFloat) {
}

public func bottomDrawerControllerDidEndOpenTransition(_ controller: MDCBottomDrawerViewController) {
}

public func bottomDrawerControllerWillTransitionClosed(_ controller: MDCBottomDrawerViewController, with transitionCoordinator: UIViewControllerTransitionCoordinator?) {
}

public func bottomDrawerControllerDidEndCloseTransition(_ controller: MDCBottomDrawerViewController) {
}

public func bottomDrawerControllerDidChangeTopYOffset(_ controller: MDCBottomDrawerViewController, yOffset: CGFloat) {
}

func transitionWith(_ controller: MDCBottomDrawerViewController, _transitionCoordinator: UIViewControllerTransitionCoordinator?, yOffset:CGFloat) {
}

Changes

BottomSheet

Chips

Dialogs

NavigationDrawer

TextFields

Typography

Multi-component changes


92.3.1

This minor hotfix adds a missing podspec dependency to TextFields+ContainedInputView extension.

Component changes

TextFields


92.3.0

This minor release introduces new color properties to TextFields and removes max size constraints on ActivityIndicator.

New features

MDCTextInputControllerBase now allows setting the input field's border in the resting state using borderStrokeColor:

MDCTextField *textField = [[MDCTextField alloc] init];
MDCTextInputControllerOutlined *controller =
  [[MDCTextInputControllerOutlined alloc] initWithTextInput:textField];
controller.borderStrokeColor = UIColor.redColor;

MDCTextInputControllerFloatingPlaceholder now allows setting the error color of the border of the input field while being in edit mode using floatingPlaceholderErrorActiveColor:

let textFieldFilled = MDCTextField()
let textFieldControllerFilled = MDCTextInputControllerFilled(textInput: textFieldFilled)
textFieldControllerFilled.floatingPlaceholderErrorActiveColor = .red

Component changes

Changes

ActivityIndicator

Tabs

TextFields

Multi-component changes


92.2.0

This minor hotfix release adds a new accessory view feature to MDCAlertController.

New features

MDCAlertController has a new accessoryView property. This property can be used to add custom views to the alert controller. Example usage:

let alert = MDCAlertController(title: "This is a title", message: "This is a message")
let textField = UITextField()
textField.placeholder = "This is a text field"
alert.accessoryView = textField

Changes

Dialogs


92.1.0

This minor release introduces badge color APIs for Bottom Navigation and Bottom Drawer support for full-height presentation with any content. Tabs and TextFields received bug fixes. Ripple optimizations improved callback behavior.

New features

Bottom Navigation

Bottom Navigation addded itemBadgeBackgroundColor and itemBadgeTextColor APIs to allow clients to set a custom badge background and text colors for all badges.

  itemView.badgeColor = UIColor.whiteColor;
  itemView.badgeTextColor = UIColor.redColor;

Navigation Drawer

Always allow the header to expand

Header can expand even if content doest fill screen.

  self.navigationDrawer.shouldAlwaysExpandHeader = YES;

Changes

BottomNavigation

NavigationDrawer

Ripple

Tabs

TextFields

Typography

private/Icons

Multi-component changes


92.0.0

This major release removes the mdc_adjustsFontForContentSizeCategory API from MDCTypographyScheming. It makes useCurrentContentSizeCategoryWhenApplied required for all implementations.

Breaking changes

Classes conforming to MDCTypographyScheming must now provide the API useCurrentContentSizeCategoryWhenApplied. It was previously recommended that it be bound to the value of mdc_adjustsFontForContentSizeCategory.

Changes

schemes/Typography


91.1.1

This patch release corrects initalization of AppBar and splits the typography scheme so the protocol can be used separately from the class conforming to the protocol.

Changes

ActionSheet

AppBar

NavigationDrawer

schemes/Typography

Multi-component changes


91.1.0

This minor release adds support for customizing the elevation on ActionSheet component, and updates its theming extension to apply a customized elevation value.

Changes

ActionSheet


91.0.0

This major release deletes several deprecated APIs and annotates several APIs as deprecated. Usage of UIWebView has also been replaced with WKWebView.

Breaking changes

Buttons shouldRaiseOnTouch was deleted. Set elevation to MDCShadowElevationNone for all states instead.

Buttons underlyingColor property was deleted. Use underlyingColorHint instead.

New deprecations

MDCMaskedTransitionController was deprecated. There is no replacement for this component. Please use a standard presentViewController invocation instead.

New features

ProgressView's cornerRadius property was added. This enables clients to customize the corner radius of the filled portion of the progress view.

ActionSheet added the ability to add a divider between the header and table. Properties headerDividerColor and showHeaderDivider were added to MDCActionSheetController. If a client wants to show a header divider they would need to set showHeaderDivider and then set an appropriate color for their use case, by default it is clearColor. By default the property showHeaderDivider view is NO so that we do not break clients. This matches a pattern outlined in MDCBannerView.

Changes

ActionSheet

BottomSheet

Buttons

MaskedTransition

ProgressView

schemes/Typography


90.0.0

This major release deletes several deprecated APIs and annotates several APIs as deprecated.

Breaking changes

Buttons' buttonWithShape: API has been deleted. Please use floatingButtonWithShape: instead.

FlexibleHeader's behavior API has been deleted. Please use shiftBehavior instead.

NavigationBar's textAlignment API has been deleted. Please use titleAlignment instead.

New deprecations

ActivityIndicator‘s ColorThemer is now deprecated. Please theme MDCActivityIndicator’s colors directly instead.

ButtonBar‘s Theming extension and TypographyThemer are now deprecated. ButtonBar is not intended to be themed as a standalone component. Please theme it via the AppBar component’s Theming extension instead.

BottomAppBar's ColorThemer is now deprecated. There is presently no replacement. Please indicate interest in a replacement at https://github.com/material-components/material-components-ios/issues/7172.

Upcoming breaking changes

BasicFontScheme is now a standalone target within schemes/Typography with the CocoaPods spec name: MaterialComponents/schemes/Typography+BasicFontScheme. For backwards compatibility, this new target is still a dependency of `MaterialComponents/schemes/Typography. This dependency will be removed as a breaking change in a subsequent release, with the intent of eventually deprecating and deleting the BasicFontScheme target altogether.

Changes

ActionSheet

ActivityIndicator

BottomAppBar

ButtonBar

Buttons

FlexibleHeader

NavigationBar

TextFields

private/ThumbTrack

schemes/Typography

Multi-component changes


89.0.0

This major release deletes several deprecated APIs, includes bug fixes for iOS 13, and improves haptics support in Slider.

Breaking changes

Buttons' customTitleColor and shouldCapitalizeTitle APIs have been deleted.

Chips' inkColor API has been deleted.

Changes

Buttons

Chips

FlexibleHeader

Slider

TextFields


88.2.0

This minor release makes the Banner component generally available, and provides a bug fix for Buttons.

New features

MDCBannerView is now available for providing messaging to your app's users. It implements Material Banners and “displays a prominent message and related optional actions.”

Changes

ActionSheet

Banner

BottomSheet

Buttons

Dialogs

FeatureHighlight

TextFields

private/Snapshot/TestHost

private/Snapshot


88.1.0

This minor change introduces presentation and dismissal improvements to NavigationDrawer. MDCSnackbarMessage subclasses must now respond to - init. Further improvements are made to the in-development Contained Input Fields.

API changes

TextFields+ContainedInputView

MDCBaseTextField

new property: labelBehavior in MDCBaseTextField

new property: label in MDCBaseTextField

MDCTextControlLabelBehavior

new enum value: MDCTextControlLabelBehaviorDisappears in MDCTextControlLabelBehavior

new enum: MDCTextControlLabelBehavior

new enum value: MDCTextControlLabelBehaviorFloats in MDCTextControlLabelBehavior

new typedef: MDCTextControlLabelBehavior

Changes

Banner

List

NavigationDrawer

Ripple

Snackbar

TextFields


88.0.1

This patch release adds performance improvements to Ripple during its initilization and layout phases.

Component changes

Changes

Ripple


88.0.0

This major release removes the mdc_legacyFontScaling API from Chips and Buttons. Ripple's colors when combining .highlighted with the .selected or .dragged states fall-back to the color for the .normal state rather than for the .selected or .dragged state. Snackbar allows disabling the legacy font scaling behavior when no attached Material scaling curves are found on its fonts. TextFields fully supports Material Elevation, ActionSheet fixed a bug with dynamic color support, and Banner received a Theming Extension. Several experimental examples were removed from TextFields.

Breaking changes

Buttons and Chips removed the mdc_legacyFontScaling API. It can be replaced with adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in all instances without any change in behavior.

New deprecations

Typography's API mdc_adjustsFontForContentSizeCategory is now deprecated and will be replaced with useCurrentContentSizeCategoryWhenApplied. It will be removed in a future release.

New features

Ripple State Management

Unless a color is explicitly set for the combination state, MDCStatefulRippleView now falls-back to the .normal color when either the .selected or .dragged states are combined with the .highlighted state. This more closely matches the behavior of UIControl subclasses.

Snackbar Dynamic Type

MDCSnackbarManager and MDCSnackbarMessageView both allow disabling of the fall-back Material Typography behavior for Dynamic Type support. When the adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable property is YES and no Material scaling curves are found attached to the fonts, then no automatic Dynamic Type scaling will take place for the manager‘s or view’s fonts. This effectively disables the pre-2019 behavior for Dynamic Type.

TextFields Support Material Elevation

MDCMultilineTextField now supports Material Elevation. Clients can assign a value for mdc_overrideBaseElevation or an elevationDidChangeBlock to ensure that both the Text Field and any subviews can react to elevation changes.

Banner Theming

MDCBannerView now supports a Theming Extension. Please note that Banner is still in Beta and not published to CocoaPods.

MDCBannerView *banner = [[MDCBannerView alloc] init];
id<MDCContainerScheming> containerScheme = [[MDCContainerScheme alloc] init];
[banner applyThemeWithScheme:containerScheme];

API changes

Banner+Theming

New extension.

Buttons

MDCButton

removed property: mdc_legacyFontScaling in MDCButton

Snackbar

MDCSnackbarManager

new property: adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in MDCSnackbarManager

MDCSnackbarMessageView()

new category: MDCSnackbarMessageView()

removed category: MDCSnackbarMessageView()

modified property: snackbarMessageViewTextColor in MDCSnackbarMessageView()

Type of change:parent.usr
From:c:objc(ext)[email protected]@4029
To:c:objc(ext)[email protected]@4574

MDCSnackbarMessageView

new property: adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in MDCSnackbarMessageView

TextFields

MDCMultilineTextField

modified class: MDCMultilineTextField

Type of change:Declaration
From:@interface MDCMultilineTextField : UIView <MDCTextInput, MDCMultilineTextInput>
To:@interface MDCMultilineTextField : UIView

modified class: MDCMultilineTextField

Type of change:Swift declaration
From:class MDCMultilineTextField : UIView, MDCTextInput, MDCMultilineTextInput
To:class MDCMultilineTextField : UIView

TypographyScheme

MDCTypographyScheming

modified property: mdc_adjustsFontForContentSizeCategory in MDCTypographyScheming

Type of change:Deprecation
From:0
To:1

modified property: mdc_adjustsFontForContentSizeCategory in MDCTypographyScheming

Type of change:Deprecation message
From:``
To:Use useCurrentContentSizeCategoryWhenApplied instead.

Component changes

Changes

ActionSheet

Banner

Buttons

Chips

Elevation

Ink

List

Ripple

Shapes

Slider

Snackbar

TextFields

private/Color

schemes/Typography


87.1.1

This patch release corrects issues with Git-LFS on the stable branch.

Multi-component changes


87.1.0

This minor release enhances support for Material Elevation in Text Fields and Snackbar, brings new conveniences for resolving dynamic colors, and fixes a dynamic color bug in MDCShapedShadowLayer.

New features

Text Fields

MDCTextField now supports Material Elevation. Clients can assign a value for mdc_overrideBaseElevation or an elevationDidChangeBlock to ensure that both the Text Field and any subviews can react to elevation changes.

Snackbar

MDCSnackbarManager now supports assigning a traitCollectionDidChangeBlockForMessageView and an mdc_elevationDidChangeBlockForMessageView. These blocks make it easier to respond to changes in either the elevation or trait collections of the MDCSnackbarMessageView.

Material Elevation

Material Elevation has a new UIColor category method to make it easier to optimize checking for dynamic color changes.

Previously

UIColor *resolvedColor = originalColor;
#if defined(__IPHONE_13_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0)
  if (@available(iOS 13.0, *)) {
    if ([traitCollection
            hasDifferentColorAppearanceComparedToTraitCollection:previousTraitCollection]) {
      resolvedColor = [self mdc_resolvedColorWithTraitCollection:traitCollection elevation:elevation];
    }
  }
#endif

This Release

UIColor *resolvedColor =
        [dynamicColor mdc_resolvedColorWithTraitCollection:currentTraitCollection
                                   previousTraitCollection:previousTraitCollection
                                                 elevation:elevation];

API changes

Elevation

UIColor(MaterialElevation)

new method: -mdc_resolvedColorWithTraitCollection:previousTraitCollection:elevation: in UIColor(MaterialElevation)

Snackbar

MDCSnackbarManager

new property: mdc_elevationDidChangeBlockForMessageView in MDCSnackbarManager

new property: traitCollectionDidChangeBlockForMessageView in MDCSnackbarManager

TextFields

MDCTextField

modified class: MDCTextField

Type of change:Swift declaration
From:class MDCTextField : UITextField, MDCTextInput, MDCLeadingViewTextInput
To:class MDCTextField : UITextField

modified class: MDCTextField

Type of change:Declaration
From:@interface MDCTextField : UITextField <MDCTextInput, MDCLeadingViewTextInput>
To:@interface MDCTextField : UITextField

Changes

Elevation

Shapes

Snackbar

TextFields

private/Color


87.0.2

This patch release includes no code changes but is necessary due to merge problems with the stable branch in version 87.0.1.


87.0.1

This patch release fixes a bug where Git-LFS was required on the stable branch.

Component changes

Multi-component changes


87.0.0

This major release improves the traitCollectionDidChangeBlock for MDCButton.

Breaking changes

MDCButton.traitCollectionDidChangeBlock now requires an MDCButton * instance as its first parameter. This is to allow passing the button itself into the block and eliminate the need for retaining the button in its own block.

Previous Releases

button.traitCollectionDidChangeBlock =
    ^(UITraitCollection *_Nullable previousTraitCollection) {
      // Code
    };

In This Release

button.traitCollectionDidChangeBlock =
    ^(MDCButton *_Nonnull buttonInBlock, UITraitCollection *_Nullable previousTraitCollection) {
      // Code
    };

API changes

Buttons

MDCButton

modified property: traitCollectionDidChangeBlock in MDCButton

Type of change:Swift declaration
From:var traitCollectionDidChangeBlock: ((UITraitCollection?) -> Void)? { get set }
To:var traitCollectionDidChangeBlock: ((MDCButton, UITraitCollection?) -> Void)? { get set }

modified property: traitCollectionDidChangeBlock in MDCButton

Type of change:Declaration
From:@property (readwrite, copy, nonatomic, nullable) void (^) (UITraitCollection *_Nullable) traitCollectionDidChangeBlock;
To:@property (readwrite, copy, nonatomic, nullable) void (^) (MDCButton *_Nonnull, UITraitCollection *_Nullable) traitCollectionDidChangeBlock;

Changes

ActionSheet

ButtonBar

Buttons

FlexibleHeader

NavigationBar

TextFields


86.1.0

This minor release introduces new theming APIs for MDCActionSheetAction and bug fixes. It also includes improvements to the Contained Input Fields and Bottom Navigation Bar Controller beta component extensions.

New features

You can now set title and icon tint colors on individual Action Sheet actions.

MDCActionSheetAction *action = [MDCActionSheetAction actionWithTitle:@"An action"
                                                               image:nil
                                                             handler:nil];
action.titleColor = UIColor.darkTextColor;
action.tintColor = UIColor.darkTextColor;

API changes

ActionSheet

MDCActionSheetAction

new property: tintColor in MDCActionSheetAction

new property: titleColor in MDCActionSheetAction

TextFields+ContainedInputView

MDCBaseTextField

new property: trailingView in MDCBaseTextField

new property: leadingViewMode in MDCBaseTextField

new property: leadingView in MDCBaseTextField

new property: trailingViewMode in MDCBaseTextField

Changes

ActionSheet

ActivityIndicator

AppBar

Banner

BottomNavigation

Buttons

Dialogs

LibraryInfo

Palettes

TextFields

Multi-component changes


86.0.0

In this major release we have provided improvements to our Elevation code for Dark Mode as well as internal clean up.

Breaking changes

Our MDCElevatable protocol now conforms to NSObject so it can leverage the isKindOfClass: and conformsToProtocol: APIs.

API changes

Elevation

MDCElevatable

modified protocol: MDCElevatable

Type of change:Declaration
From:@protocol MDCElevatable
To:@protocol MDCElevatable <NSObject>

modified protocol: MDCElevatable

Type of change:Swift declaration
From:protocol MDCElevatable
To:protocol MDCElevatable : NSObjectProtocol

Component changes

Changes

ActionSheet

ActivityIndicator

AnimationTiming

Banner

BottomAppBar

BottomNavigation

BottomSheet

ButtonBar

Buttons

Cards

Chips

CollectionCells

CollectionLayoutAttributes

Collections

Elevation

FeatureHighlight

FlexibleHeader

HeaderStackView

Ink

LibraryInfo

List

MaskedTransition

NavigationBar

NavigationDrawer

OverlayWindow

PageControl

Palettes

ProgressView

Ripple

ShadowElevations

ShadowLayer

ShapeLibrary

Shapes

Slider

Snackbar

Tabs

TextFields

Themes

Typography

private/Application

private/Color

private/Icons

private/KeyboardWatcher

private/Math

private/Overlay

private/ThumbTrack

private/UIMetrics

schemes/Color

schemes/Container

schemes/Shape

schemes/Typography


85.12.0

This minor release introduces Material Elevation support for ActionSheet and Banner (Beta). It also includes performance improvements for Ink and Ripple.

New features

Support for Material Elevation expanded to two more components. APIs to support overriding the computed value for mdc_baseElevation and to respond to elevation changes are available. Assigning an elevationDidChangeBlock on a supported component enables code to be executed whenever the component‘s elevation changes. This may include state-based elevation changes (like pressing on a Chip) or when the component’s elevation value is changed programmatically.

Changes

ActionSheet

Banner

Multi-component changes


85.11.0

This minor release introduces Material Elevation support for Bottom Sheet, Navigation Bar, Slider, and Tabs. Bottom Sheet removed its broken -init initializer, and some internal clean-up was done to remove iOS 8 support.

New features

Support for Material Elevation expanded to several more components. APIs to support overriding the computed value for mdc_baseElevation and to respond to elevation changes are available. Assigning an elevationDidChangeBlock on a supported component enables code to be executed whenever the component‘s elevation changes. This may include state-based elevation changes (like pressing on a Chip) or when the component’s elevation value is changed programmatically.

Changes

ActionSheet

BottomNavigation

BottomSheet

Elevation

NavigationBar

Slider

Tabs

Typography

private/Color

schemes/Typography


85.10.0

This minor release expands support for trait collection and Material Elevation changes in several components. Bottom Sheet and Navigation Drawer now support shadows and elevation.

Breaking changes

The following breaking changes were made for Beta components that are not published to CocoaPods.

  • MDCBottomNavigationBarController now positions child view controllers' views behind the Bottom Navigation bar.
  • MDCBannerView now uses a UITextView for the message text instead of a UILabel.

New features

Several more components received APIs that allow responding to UITraitCollection changes. Assigning a traitCollectionDidBlock on a supported component enables code to be executed in the component's traitCollectionDidChange: method without subclassing.

Support for Material Elevation expanded to several more components. APIs to support overriding the computed value for mdc_baseElevation and to respond to elevation changes are available. Assigning an elevationDidChangeBlock on a supported component enables code to be executed whenever the component‘s elevation changes. This may include state-based elevation changes (like pressing on a Chip) or when the component’s elevation value is changed programmatically.

The Bottom Sheet component, specifically MDCBottomSheetController now renders a shadow by default. This may cause a very slight change in the shading around the edges of the view. If desired, non-elevated Bottom Sheets can be configured by setting the elevation property's value to 0.

Likewise, the Navigation Drawer‘s MDCBottomDrawerPresentationController renders a shadow by default. To disable the shadow or modify the drawer’s elevation, set the elevation property to the desired value.

MDCBottomSheetController *bottomSheet =
      [[MDCBottomSheetController alloc] initWithContentViewController:mySheetContentVC];
bottomSheet.elevation = 0;

MDCTabBarView, currently in Beta, now provides an API to set its preferred layout style.

MDCTabBarView *tabBarView = [[MDCTabBarView alloc] init];
tabBarView.preferredLayoutStyle = MDCTabBarViewLayoutStyleScrollable;

Changes

AppBar

Banner

BottomAppBar

BottomNavigation

BottomSheet

Buttons

Cards

Chips

Dialogs

Elevation

FeatureHighlight

FlexibleHeader

HeaderStackView

Ink

List

NavigationDrawer

PageControl

ProgressView

Ripple

Slider

Snackbar

Tabs

TextFields

Typography

private/Color

Multi-component changes


85.9.1

This patch release fixes a crash in BottomNavigation when a KVO'd property is assigned nil.

Changes

BottomNavigation


85.9.0

This minor release includes new elevation protocols to prepare for Dark Mode, dynamic color support in several components, and a number of MDCTabBarView features.

New features

Several components support traitCollectionDidChangeBlock to allow clients inject a block for exection when traitCollections changes. TabBarView allows clients to set preferred layout style.

API changes

ActionSheet

MDCActionSheetController

new property: traitCollectionDidChangeBlock in MDCActionSheetController

ActivityIndicator

MDCActivityIndicator

new property: traitCollectionDidChangeBlock in MDCActivityIndicator

Banner

MDCBannerView

new property: traitCollectionDidChangeBlock in MDCBannerView

BottomAppBar

MDCBottomAppBarView

new property: traitCollectionDidChangeBlock in MDCBottomAppBarView

BottomSheet

MDCBottomSheetController

new property: traitCollectionDidChangeBlock in MDCBottomSheetController

MDCBottomSheetPresentationController

new property: traitCollectionDidChangeBlock in MDCBottomSheetPresentationController

ButtonBar

MDCButtonBar

new property: traitCollectionDidChangeBlock in MDCButtonBar

Cards

MDCCard

new property: traitCollectionDidChangeBlock in MDCCard

MDCCardCollectionCell

new property: traitCollectionDidChangeBlock in MDCCardCollectionCell

Chips

MDCChipView

new property: traitCollectionDidChangeBlock in MDCChipView

Dialogs

MDCAlertController

new property: shadowColor in MDCAlertController

new property: traitCollectionDidChangeBlock in MDCAlertController

MDCDialogPresentationController

new property: dialogShadowColor in MDCDialogPresentationController

new property: traitCollectionDidChangeBlock in MDCDialogPresentationController

Elevation

MDCElevatable

new property: mdc_currentElevation in MDCElevatable

new property: mdc_elevationDidChangeBlock in MDCElevatable

new protocol: MDCElevatable

MDCElevatableOverriding

new property: mdc_overrideBaseElevation in MDCElevatable

new protocol: MDCElevatableOverriding

List

MDCBaseCell

new property: traitCollectionDidChangeBlock in MDCBaseCell

NavigationDrawer

MDCBottomDrawerPresentationController

new property: traitCollectionDidChangeBlock in MDCBottomDrawerPresentationController

MDCBottomDrawerViewController

new property: traitCollectionDidChangeBlock in MDCBottomDrawerViewController

Ripple

MDCRippleView

new property: activeRippleColor in MDCRippleView

removed method: -setActiveRippleColor: in MDCRippleView

Slider

MDCSlider

new property: thumbShadowColor in MDCSlider

Tabs

MDCTabBarView

new enum value: MDCTabBarViewLayoutStyleFixed in MDCTabBarView

new enum value: MDCTabBarViewLayoutStyleScrollable in MDCTabBarView

new enum value: MDCTabBarViewLayoutStyleFixedClusteredCentered in MDCTabBarView

new enum value: MDCTabBarViewLayoutStyleFixedClusteredLeading in MDCTabBarView

new enum value: MDCTabBarViewLayoutStyleFixedClusteredTrailing in MDCTabBarView

new enum: MDCTabBarViewLayoutStyle

new typedef: MDCTabBarViewLayoutStyle

new property: preferredLayoutStyle in MDCTabBarView

new property: selectionChangeAnimationDuration in MDCTabBarView

new property: selectionChangeAnimationTimingFunction in MDCTabBarView

Component changes

ActionSheet

ActivityIndicator

Banner

BottomAppBar

BottomNavigation

BottomSheet

ButtonBar

Cards

Chips

Dialogs

Elevation

FeatureHighlight

FlexibleHeader

Ink

List

NavigationDrawer

private/Snapshot

Ripple

Slider

Tabs

TextFields

Multi-component changes


85.8.0

This minor release includes two new default color schemes and elevation properties to prepare for Dark Mode, dynamic color support in several components, Haptics feature in Slider, and a number of MDCTabBarView features.

New features

Several components support traitCollectionDidChangeBlock to allow clients inject a block for exection when traitCollections changes. Slider supports Haptics feature.

API changes

AppBar

MDCAppBar

new property: traitCollectionDidChangeBlockForAppBarController in MDCAppBarNavigationController

BottomNavigation

MDCBottomNavigationBar

new property: traitCollectionDidChangeBlock in MDCBottomNavigationBar

Buttons

MDCButton

new property: traitCollectionDidChangeBlock in MDCButton

FlexibleHeader

MDCFlexibleHeaderContainerViewController

new property: traitCollectionDidChangeBlock in MDCFlexibleHeaderContainerViewController

MDCFlexibleHeaderView

new property: shadowColor in MDCFlexibleHeaderView

new property: traitCollectionDidChangeBlock in MDCFlexibleHeaderView

MDCFlexibleHeaderViewController

new property: traitCollectionDidChangeBlock in MDCFlexibleHeaderViewController

NavigationBar

MDCNavigationBar

new property: traitCollectionDidChangeBlock in MDCNavigationBar

NavigationDrawer

MDCBottomDrawerContainerViewController

new property: headerShadowColor in MDCBottomDrawerContainerViewController

Slider

MDCSlider

new property: shouldEnableHapticsForAllDiscreteValues in MDCSlider

Snackbar

MDCSnackbarManager

new property: messageElevation in MDCSnackbarManager

MDCSnackbarMessageView

new property: elevation in MDCSnackbarMessageView

new property: traitCollectionDidChangeBlock in MDCSnackbarMessageView

Tabs+TabBarView

MDCTabBarView

new method: -rectForItem:inCoordinateSpace: in MDCTabBarView

schemes/Color

MDCColorScheming

new property: elevationOverlayColor in MDCColorScheming

new property: elevationOverlayEnabledForDarkMode in MDCColorScheming

MDCSemanticColorScheme

new property: elevationOverlayColor in MDCSemanticColorScheme

new property: elevationOverlayEnabledForDarkMode in MDCSemanticColorScheme

Component changes

AppBar

Banner

BottomNavigation

Buttons

FlexibleHeader

NavigationBar

NavigationDrawer

ProgressView

Shapes

Slider

Snackbar

Tabs

TextFields

private/Color

private/Snapshot

schemes/Color


85.7.0

This minor release exposes some properties on Snackbars and fixes a Banner bug.

API changes

Snackbar

MDCSnackbarManager

new property: buttonInkColor in MDCSnackbarManager

new property: uppercaseButtonTitle in MDCSnackbarManager

new property: disabledButtonAlpha in MDCSnackbarManager

Component changes

Snackbar

Banner


85.6.0

This minor release includes features and bug fixes for the MDCTabBarView Beta component.

API changes

Tabs+TabBarView

MDCTabBarViewIndicatorSupporting

removed protocol: MDCTabBarViewIndicatorSupporting

removed property: bounds in MDCTabBarViewIndicatorSupporting

removed property: contentFrame in MDCTabBarViewIndicatorSupporting

MDCTabBarItemCustomViewing

modified property: mdc_customView in MDCTabBarItemCustomViewing

Type of change:Declaration
From:@property (readwrite, strong, nonatomic, nullable) UIView<MDCTabBarViewIndicatorSupporting> *mdc_customView;
To:@property (readwrite, strong, nonatomic, nullable) UIView<MDCTabBarViewCustomViewable> *mdc_customView;

MDCTabBarView

new property: bottomDividerColor in MDCTabBarView

new method: -accessibilityElementForItem: in MDCTabBarView

MDCTabBarViewCustomViewable

new property: bounds in MDCTabBarViewCustomViewable

new property: contentFrame in MDCTabBarViewCustomViewable

new protocol: MDCTabBarViewCustomViewable

new method: -setSelected:animated: in MDCTabBarViewCustomViewable

Component changes

Tabs


85.5.1

This patch release makes a FlexibleHeader dependency on MaterialMath explicit in MaterialComponents.podspec so that pod lib lint validations pass and the release can be published successfully with Cocoapods. There are no code changes.

Component changes

FlexibleHeader


85.5.0

This minor release includes a theming extension for ProgressView, a bug fix for FlexibleHeader, haptics support for Slider, and progress on a number of core MDCTabBarView features.

New features

ProgressView now has a theming extension.

MDCProgressView *progressView = [[MDCProgressView alloc] init];
MDCContainerScheme *containerScheme = [[MDCContainerScheme alloc] init];
[progressView applyThemeWithScheme:containerScheme];

API changes

ProgressView+Theming

New extension.

Slider

MDCSlider

new property: hapticsEnabled in MDCSlider

Component changes

FlexibleHeader

ProgressView

Slider

Tabs

private/Math


85.4.0

This minor release includes changes to the MDCTabBarView Beta component.

API Changes

Tabs+TabBarView

MDCTabBarViewIndicatorTemplate

new protocol: MDCTabBarViewIndicatorTemplate

new method: -indicatorAttributesForContext: in MDCTabBarViewIndicatorTemplate

MDCTabBarViewIndicatorAttributes

new class: MDCTabBarViewIndicatorAttributes

new property: path in MDCTabBarViewIndicatorAttributes

MDCTabBarViewIndicatorContext

new property: contentFrame in MDCTabBarViewIndicatorContext

new protocol: MDCTabBarViewIndicatorContext

new property: item in MDCTabBarViewIndicatorContext

new property: bounds in MDCTabBarViewIndicatorContext

MDCTabBarView

new property: rippleColor in MDCTabBarView

MDCTabBarViewUnderlineIndicatorTemplate

new class: MDCTabBarViewUnderlineIndicatorTemplate

Component changes

Tabs


85.3.0

This minor release includes changes to the MDCTabBarView Beta component.

Component changes

Tabs


85.2.0

In this minor release we have fixed bugs in Buttons and FlexibleHeader, added new features to Banner, added a theming extension for BottomNavigation, and improved test coverage in BottomSheet.

New features

MDCBanner now supports intrinsicContentSize.

MDCBannerView *myBanner = ...
CGSize validIntrinsicContentSize = myBanner.intrinsicContentSize;

API changes

Banner

MDCBannerView

new property: mdc_adjustsFontForContentSizeCategory in MDCBannerView

BottomNavigation+Theming

New extension.

Tabs+TabBarView

MDCTabBarViewIndicatorSupporting

new protocol: MDCTabBarViewIndicatorSupporting

new property: contentFrame in MDCTabBarViewIndicatorSupporting

new property: bounds in MDCTabBarViewIndicatorSupporting

MDCTabBarView

new method: -setTitleFont:forState: in MDCTabBarView

new method: -titleColorForState: in MDCTabBarView

new method: -setImageTintColor:forState: in MDCTabBarView

new method: -titleFontForState: in MDCTabBarView

new method: -imageTintColorForState: in MDCTabBarView

new property: tabBarDelegate in MDCTabBarView

new method: -setSelectedItem:animated: in MDCTabBarView

new method: -setTitleColor:forState: in MDCTabBarView

new property: barTintColor in MDCTabBarView

MDCTabBarItem

new class: MDCTabBarItem

MDCTabBarItemCustomViewing

new protocol: MDCTabBarItemCustomViewing

new property: mdc_customView in MDCTabBarItemCustomViewing

MDCTabBarViewDelegate

new method: -tabBarView:shouldSelectItem: in MDCTabBarViewDelegate

new protocol: MDCTabBarViewDelegate

new method: -tabBarView:didSelectItem: in MDCTabBarViewDelegate

TextFields+ContainedInputView

New extension.

Changes

Banner

BottomNavigation

BottomSheet

Buttons

FlexibleHeader

Tabs

TextFields

private/ThumbTrack


85.1.0

In this minor release we have begun development of a new Tab component, as well as additional tests and bug fixes.

New features

Chips now support selection for ripple when in the selected state.

MDCChipView *chipView = [[MDCChipView alloc] init];
chipView.enableRippleBehavior = YES;
chipView.rippleAllowsSelection = YES;

API changes

Chips

MDCChipView

new property: rippleAllowsSelection in MDCChipView

Tabs

MDCTabBarView

new class: MDCTabBarView

Component changes

Changes

AppBar

Banner

Chips

NavigationDrawer

Tabs

schemes/Typography

Multi-component changes


85.0.1

This patch release fixes a bug that Banner doesn't layout correctly in landscape mode on some devices and a floating point rounding issue in NavigationDrawer.

Changes

Banner

NavigationDrawer


85.0.0

In this major release we updated sizeThatFits: calculation for MDCBottomNavigationBar to not include safe area, added Ripple support to all our interactable components, and more layout customization for Banner.

Breaking changes

We have changed the sizeThatFits: behavior for BottomNavigation's bar to not include the safe area by default. This is a breaking change as prior we did include the safe area as part of the calculation, but we should not since the view controller (or parent view) should worry about positioning the BottomNavigationBar within the unsafe area (if it desires).

If you still wish to include the safe area in the sizeThatFits calculation:

self.bottomNavigationBar.sizeThatFitsIncludesSafeArea = YES;

New features

Enable the new Ripple behavior in components by setting enableRippleBehavior to YES, and set its color using the rippleColor API:

MDCTabBar *tabBar = [[MDCTabBar alloc] init];
tabBar.enableRippleBehavior = YES;
tabBar.rippleColor = UIColor.blueColor;

MDCBanner supports different layout styles using the MDCBannerViewLayoutStyle enum:

MDCBannerView *bannerView = [[MDCBannerView alloc] init];
bannerView.bannerViewLayoutStyle = MDCBannerViewLayoutStyleSingleRow;

MDCBanner now allows you to show/hide a divider:

MDCBannerView *bannerView = [[MDCBannerView alloc] init];
bannerView.showsDivider = YES;

API changes

ActionSheet

MDCActionSheetController

new property: rippleColor in MDCActionSheetController

new property: enableRippleBehavior in MDCActionSheetController

MDCActionSheetController(ToBeDeprecated)

new category: MDCActionSheetController(ToBeDeprecated)

modified property: inkColor in MDCActionSheetController(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCActionSheetController
To:c:objc(cy)MDCActionSheetController@ToBeDeprecated

Banner

MDCBannerViewLayoutStyle

new enum value: MDCBannerViewLayoutStyleAutomatic in MDCBannerViewLayoutStyle

new enum value: MDCBannerViewLayoutStyleMultiRowAlignedButton in MDCBannerViewLayoutStyle

new enum value: MDCBannerViewLayoutStyleMultiRowStackedButton in MDCBannerViewLayoutStyle

new enum value: MDCBannerViewLayoutStyleSingleRow in MDCBannerViewLayoutStyle

new enum: MDCBannerViewLayoutStyle

new typedef: MDCBannerViewLayoutStyle

MDCBannerView

new property: bannerViewLayoutStyle in MDCBannerView

new property: showsDivider in MDCBannerView

new property: dividerColor in MDCBannerView

BottomNavigation

MDCBottomNavigationBar(ToBeDeprecated)

new category: MDCBottomNavigationBar(ToBeDeprecated)

modified property: sizeThatFitsIncludesSafeArea in MDCBottomNavigationBar(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCBottomNavigationBar
To:c:objc(cy)MDCBottomNavigationBar@ToBeDeprecated

MDCBottomNavigationBar

new property: enableRippleBehavior in MDCBottomNavigationBar

ButtonBar

MDCButtonBar

new property: enableRippleBehavior in MDCButtonBar

new property: rippleColor in MDCButtonBar

MDCButtonBar(ToBeDeprecated)

new category: MDCButtonBar(ToBeDeprecated)

modified property: inkColor in MDCButtonBar(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCButtonBar
To:c:objc(cy)MDCButtonBar@ToBeDeprecated

Dialogs

MDCAlertControllerView

new property: enableRippleBehavior in MDCAlertControllerView

MDCAlertController

new property: enableRippleBehavior in MDCAlertController

List

MDCBaseCell

new property: rippleColor in MDCBaseCell

new property: enableRippleBehavior in MDCBaseCell

MDCBaseCell(ToBeDeprecated)

new category: MDCBaseCell(ToBeDeprecated)

modified property: inkColor in MDCBaseCell(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCBaseCell
To:c:objc(cy)MDCBaseCell@ToBeDeprecated

NavigationBar

MDCNavigationBar

new property: enableRippleBehavior in MDCNavigationBar

new property: rippleColor in MDCNavigationBar

MDCNavigationBar(ToBeDeprecated)

new category: MDCNavigationBar(ToBeDeprecated)

modified property: inkColor in MDCNavigationBar(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCNavigationBar
To:c:objc(cy)MDCNavigationBar@ToBeDeprecated

Slider

MDCSlider(ToBeDeprecated)

new category: MDCSlider(ToBeDeprecated)

modified property: inkColor in MDCSlider(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCSlider
To:c:objc(cy)MDCSlider@ToBeDeprecated

MDCSlider

new property: enableRippleBehavior in MDCSlider

new property: rippleColor in MDCSlider

Snackbar

MDCSnackbarMessage

new property: enableRippleBehavior in MDCSnackbarMessage

Tabs

MDCTabBar

new property: enableRippleBehavior in MDCTabBar

new property: rippleColor in MDCTabBar

MDCTabBar(ToBeDeprecated)

new category: MDCTabBar(ToBeDeprecated)

modified property: inkColor in MDCTabBar(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTabBar
To:c:objc(cy)MDCTabBar@ToBeDeprecated

Component changes

Changes

ActionSheet

AppBar

Banner

BottomNavigation

BottomSheet

ButtonBar

Dialogs

List

NavigationBar

Slider

Snackbar

Tabs

TextFields

private/ThumbTrack


84.6.0

In this minor release we added new features to ActionSheet and NavigationDrawer, as well as additional tests and bug fixes.

New features

ActionSheet now allows clients to align all titles regardless of if an image is present or not.

let actionSheet = MDCActionSheetController()
let actionOne = MDCActionSheetAction(title: "Email",
                                     image: nil) { (_) in
                                       print("Email action") }
let actionTwo = MDCActionSheetAction(title: "Cancel",
                                     image: UIImage(named: "CancelImage")) { (_) in
                                       print("Cancel action") }
actionSheet.addAction(actionOne)
actionSheet.addAction(actionTwo)
actionSheet.alwaysAlignTitleLeadingEdges = true

NavigationDrawer now allows clients to automatically include the safeAreaInsets in the content height calculation. By enabling this flag the MDCBottomDrawerViewController will add the safeAreaInsets.bottom to the preferredContentSize.height of the contentViewController.

let navigationDrawer = MDCBottomDrawerViewController()
navigationDrawer.shouldIncludeSafeAreaInContentHeight = true

API changes

ActionSheet

new property: alwaysAlignTitleLeadingEdges in MDCActionSheetController

NavigationDrawer

new property: shouldIncludeSafeAreaInContentHeight in MDCBottomDrawerViewController new property: shouldIncludeSafeAreaInContentHeight in MDCBottomDrawerPresentationController

Component changes

Changes

ActionSheet

Buttons

List

MaskedTransition

NavigationDrawer

Ripple

Tabs

schemes/Typography

Multi-component changes


84.5.0

In this minor release we have expanded our support for NavigationBar as well as additional tests and bug fixes.

New features

NavigationBar now allows clients to present overlay views that point to views in an MDCNavigationBar:

let leadingRect = navigationBar.rect(forLeading: leadingItem, in: view)
let trailingRect = navigationBar.rect(forTrailing: trailingItem, in: view)
// Present an overlay pointing at `leadingRect` or `trailingRect`

API changes

NavigationBar

MDCNavigationBar

new method: -rectForLeadingBarButtonItem:inCoordinateSpace in MDCNavigationBar new method: -rectForTrailingBarButtonItem:inCoordinateSpace in MDCNavigationBar

Component changes

Changes

AppBar

Buttons

Dialogs

List

NavigationBar

Tabs

TextFields

Typography

Multi-component changes


84.4.0

In this minor release we have expanded our support for custom Dynamic Type scaling curves in Buttons, Chips, and List, as well as additional tests and bug fixes.

New deprecations

mdc_legacyFontScaling in MDCButton and MDCChipView has been deprecated. Please use adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable instead.

New features

Buttons, Chips, and List, have expanded their support for Dynamic Type to allow custom scaling curves to be associated with fonts:

MDCButton *button = [[MDCButton alloc] init];
UIFont *customFont = [UIFont fontWithName:@"CustomFontName" size:18.0];
MDCFontScaler *fontScaler = [MDCFontScaler scalerForMaterialTextStyle:MDCTextStyleBody1];
UIFont *customScalableFont = [fontScaler scaledFontWithFont:customFont];
[button setTitleFont:customScalingFont forState:UIControlStateNormal];

Buttons, Chips, Dialogs, and List, now have a new property adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable that affects the fallback behavior for when a scaled font is not provided. If set to YES the font size will adjust even if a scaled font has not been provided for a given UIFont property on this component. If set to NO, the font size will only be adjusted if a scaled font has been provided.

ButtonBar now allows clients to present overlay views that point to views in an MDCButtonBar:

let rect = buttonBar.rect(for: item, in: view)
// Present an overlay pointing at `rect`

As part of the typography component, we added a new method to UIFont mdc_scaledFontForTraitEnvironment: that returns a font with the same family, weight and traits, but whose point size is based on the given trait environment's preferred content size category.

API changes

ButtonBar

MDCButtonBar

new method: -rectForItem:item:inCoordinateSpace in MDCButtonBar

Buttons

MDCButton

new property: adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in MDCButton

deprecated property: mdc_legacyFontScaling in MDCButton

Chips

MDCChipView

new property: adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in MDCChipView

deprecated property: mdc_legacyFontScaling in MDCChipView

Dialogs

MDCAlertController

new property: adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in MDCAlertController

List

MDCSelfSizingStereoCell

new property: adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in MDCSelfSizingStereoCell

Typography

UIFont+MaterialScalable

new method: mdc_scaledFontForTraitEnvironment:traitEnvironment in UIFont+MaterialScalable

schemes/Typography

MDCTypographyScheme

new property: useCurrentContentSizeCategoryWhenApplied in MDCTypographyScheming

new property: useCurrentContentSizeCategoryWhenApplied in MDCTypographyScheme

Component changes

Changes

ButtonBar

Buttons

Chips

Dialogs

List

NavigationDrawer

Tabs

Typography

schemes/Typography


84.3.0

This minor release adds new theming extensions for Lists and minor bug fixes and documentation updates to multiple components.

New features

Theming extensions are now available for Lists:

let cell = MDCSelfSizingStereoCell()
let scheme = MDCContainerScheme()

cell.applyTheme(withScheme: scheme)

API changes

Chips

MDCChipView

modified class: MDCChipView

new property: mdc_legacyFontScaling in MDCChipView

List+Theming

New extension.

Changes

Buttons

Chips

FlexibleHeader

List

NavigationDrawer

ProgressView

Multi-component changes


84.2.1

This patch release fixes a bug where dialogs were not indicating that their content was scrollable.

Changes

Dialogs

84.2.0

This minor release adds support for a custom unbounded Ripple radius value. It also includes several bug fixes and documentation updates to multiple components.

New features

MDCRippleView now supports a custom ripple radius for the .unbounded ripple style. This allows clients to customize how far outside (or within) a view the ripple effect will extend.

MDCRippleView *rippleView = [[MDCRippleView alloc] init];
rippleView.rippleStyle = MDCRippleStyleUnbounded;
rippleView.maximumRadius = 10;

API changes

Ripple

MDCRippleView

new property: maximumRadius in MDCRippleView

ShadowElevations

MDCShadowElevationNavDrawer

modified constant: MDCShadowElevationNavDrawer

Type of change:Declaration
From:static const MDCShadowElevation MDCShadowElevationNavDrawer = (CGFloat)16.
To:static const MDCShadowElevation MDCShadowElevationNavDrawer = (CGFloat)4.

Component changes

Changes

ActionSheet

BottomNavigation

Ink

NavigationDrawer

Ripple

TextFields

Snapshot (private)

Multi-component changes


84.1.1

This patch release fixes ActionSheet to lay out its content correctly when there is a safe area present, for iOS 11 and newer.

Changes

ActionSheet


84.1.0

This minor release adds enhancements to PageControl and Ink, bug fixes for FlexibleHeader, Ink, NavigationBar, and Ripple, and additional test coverage for ActionSheet and NavigationBar.

New features

Ink

MDCInkTouchController now gives users the ability to require that UIScrollView gesture recognizers fail before the ink animation is triggered. (#7315)

inkTouchController.requiresFailureOfScrollViewGestures = YES;

API changes

Ink

new property: requiresFailureOfScrollViewGestures in MDCInkTouchController

Changes

ActionSheet

BottomNavigation

FlexibleHeader

Ink

NavigationBar

PageControl

Ripple


84.0.0

This release corrected a TextFields accessibility behavior, added Ripple to Chips, and added additional delegate calls to BottomSheet.

Theming docs for multiple components were added, including Chips, Dialogs, and Cards.

Breaking changes

TextField

The VoiceOver behavior of MDCTextField was modified. Much of the information previously returned by -accessibilityValue is now being returned by -accessibilityLabel. There is now a , that results in a pause between the label and the helper text.

Searches for MDCTextFields in your view hiearchy with accessiblity value must be changed to searches for the MDCTextField's accessibility label. The label now also has a inserted , too.

For example an EarlGrey matcher needs to be adjusted from

EarlGrey
      .selectElement(with: grey_accessibilityValue("Phone Number XXX-XXXX")

To:

EarlGrey
      .selectElement(with: grey_accessibilityLabel("Phone Number, XXX-XXXX")

More information can be found in the PR

New features

Dialog theming

Moved from beta to ready

Bottom Sheet

All methods in the MDCBottomSheetControllerDelegate protocol were marked optional.

Two new methods were added to convey state changes and scroll events.

- (void)bottomSheetControllerDidChangeYOffset:(MDCBottomSheetController *)controller
                                      yOffset:(CGFloat)yOffset {
  NSLog(@"bottom sheet Y offset changed: %f", yOffset);
}
- (void)bottomSheetControllerStateChanged:(MDCBottomSheetController *)controller
                                    state:(MDCSheetState)state {
  NSLog(@"bottom sheet state changed to: %lu", (unsigned long)state);
}

Chips

Ripple support was added.

  chipView.enableRippleBehavior = YES;

API changes

BottomSheet

MDCBottomSheetControllerDelegate

new method: -bottomSheetControllerStateChanged:state: in MDCBottomSheetControllerDelegate

new method: -bottomSheetControllerDidChangeYOffset:yOffset: in MDCBottomSheetControllerDelegate

modified method: -bottomSheetControllerDidDismissBottomSheet: in MDCBottomSheetControllerDelegate

Type of change:Swift declaration
From:func bottomSheetControllerDidDismissBottomSheet(_ controller: MDCBottomSheetController)
To:optional func bottomSheetControllerDidDismissBottomSheet(_ controller: MDCBottomSheetController)

MDCBottomSheetPresentationControllerDelegate

new method: -bottomSheetDidChangeYOffset:yOffset: in MDCBottomSheetPresentationControllerDelegate

modified method: -bottomSheetWillChangeState:sheetState: in MDCBottomSheetPresentationControllerDelegate

Type of change:Declaration
From:- (void)bottomSheetWillChangeState:(nonnull MDCBottomSheetPresentationController *)bottomSheet sheetState:(MDCSheetState)sheetState;
To:- (void)bottomSheetWillChangeState: (nonnull MDCBottomSheetPresentationController *)bottomSheet sheetState:(MDCSheetState)sheetState;

Chips

MDCChipView

new property: enableRippleBehavior in MDCChipView

modified class: MDCChipView

Type of change:Declaration
From:@interface MDCChipView : UIControl /* A UIImageView that leads the title label. */ @property(nonatomic, readonly, nonnull) IBInspectable UIImageView *imageView; /* A UIImageView that leads the title label. Appears in front of the imageView. Only visible when the chip is selected. This image view is typically used to show some icon that denotes the chip as selected, such as a check mark. If imageView has no image then the chip will require resizing when selected or deselected to account for the changing visibility of selectedImageView. */ @property(nonatomic, readonly, nonnull) IBInspectable UIImageView *selectedImageView; /* A UIView that trails the title label. It will be given a size based on the value returned from sizeThatFits:. */ @property(nonatomic, strong, nullable) IBInspectable UIView *accessoryView; /* The title label. @note The title color is controlled by setTitleColor:forState:. @note The title font is controlled by setTitleFont. */ @property(nonatomic, readonly, nonnull) IBInspectable UILabel *titleLabel; /* Padding around the chip content. Each subview can be further padded with their invidual padding property. The chip uses this property to determine intrinsicContentSize and sizeThatFits. Defaults to (4, 4, 4, 4). */ @property(nonatomic, assign) UIEdgeInsets contentPadding UI_APPEARANCE_SELECTOR; /* Padding around the image view. Only used if the image view has a non-nil image. The chip uses this property to determine intrinsicContentSize and sizeThatFits. Defaults to (0, 0, 0, 0). */ @property(nonatomic, assign) UIEdgeInsets imagePadding UI_APPEARANCE_SELECTOR; /* Padding around the accessory view. Only used if the accessory view is non-nil. The chip uses this property to determine intrinsicContentSize and sizeThatFits. Defaults to (0, 0, 0, 0). */ @property(nonatomic, assign) UIEdgeInsets accessoryPadding UI_APPEARANCE_SELECTOR; /* Padding around the title. The chip uses this property to determine intrinsicContentSize and sizeThatFits. Defaults to (3, 8, 4, 8). The top padding is shorter so the default height of a chip is 32 pts. */ @property(nonatomic, assign) UIEdgeInsets titlePadding UI_APPEARANCE_SELECTOR; /* Font used to render the title. If nil, the chip will use the system font. */ @property(nonatomic, strong, nullable) UIFont *titleFont UI_APPEARANCE_SELECTOR; /* The color of the ink ripple. */ @property(nonatomic, strong, null_resettable) UIColor *inkColor UI_APPEARANCE_SELECTOR __deprecated_msg("Use setInkColor:forState:"); /* The shape generator used to define the chip's shape. */ @property(nullable, nonatomic, strong) id<MDCShapeGenerating> shapeGenerator UI_APPEARANCE_SELECTOR; /* Indicates whether the chip should automatically update its font when the device’s UIContentSizeCategory is changed. This property is modeled after the adjustsFontForContentSizeCategory property in the UIContentSizeCategoryAdjusting protocol added by Apple in iOS 10.0. If set to YES, this button will base its text font on MDCFontTextStyleButton. Default value is NO. */ @property(nonatomic, readwrite, setter=mdc_setAdjustsFontForContentSizeCategory:) BOOL mdc_adjustsFontForContentSizeCategory UI_APPEARANCE_SELECTOR; /** The minimum dimensions of the Chip. A non-positive value for either height or width is equivalent to no minimum for that dimension. Defaults to a minimum height of 32 points, and no minimum width. */ @property(nonatomic, assign) CGSize minimumSize UI_APPEARANCE_SELECTOR; /** Custom insets to use when computing touch targets. A positive inset value will shrink the hit area for the Chip. */ @property(nonatomic, assign) UIEdgeInsets hitAreaInsets; /* A color used as the chip's @c backgroundColor for @c state. If no background color has been set for a given state, the returned value will fall back to the value set for UIControlStateNormal. @param state The control state. @return The background color. */ - (nullable UIColor *)backgroundColorForState:(UIControlState)state; /* A color used as the chip's @c backgroundColor. Defaults to blue. @param backgroundColor The background color. @param state The control state. */ - (void)setBackgroundColor:(nullable UIColor *)backgroundColor forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /* Returns the border color for a particular control state. If no border width has been set for a given state, the returned value will fall back to the value set for UIControlStateNormal. @param state The control state. @return The border color for the requested state. */ - (nullable UIColor *)borderColorForState:(UIControlState)state; /* Sets the border color for a particular control state. @param borderColor The border color. @param state The control state. */ - (void)setBorderColor:(nullable UIColor *)borderColor forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /* Returns the border width for a particular control state. If no border width has been set for a given state, the returned value will fall back to the value set for UIControlStateNormal. @param state The control state. @return The border width for the requested state. */ - (CGFloat)borderWidthForState:(UIControlState)state; /* Sets the border width for a particular control state. @param borderWidth The border width. @param state The control state. */ - (void)setBorderWidth:(CGFloat)borderWidth forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /* Returns the elevation for a particular control state. If no elevation has been set for a given state, the returned value will fall back to the value set for UIControlStateNormal. @param state The control state. @return The elevation for the requested state. */ - (MDCShadowElevation)elevationForState:(UIControlState)state; /* Sets the elevation for a particular control state. @param elevation The elevation. @param state The control state. */ - (void)setElevation:(MDCShadowElevation)elevation forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /* Returns the ink color for a particular control state. If no ink color has been set for a given state, the returned value will fall back to the value set for UIControlStateNormal. Defaults to nil. When nil MDCInkView.defaultInkColor is used. @param state The control state. @return The ink color for the requested state. */ - (nullable UIColor *)inkColorForState:(UIControlState)state; /* Sets the ink color for a particular control state. @param inkColor The ink color. @param state The control state. */ - (void)setInkColor:(nullable UIColor *)inkColor forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /* Returns the shadow color for a particular control state. If no shadow color has been set for a given state, the returned value will fall back to the value set for UIControlStateNormal. @param state The control state. @return The shadow color for the requested state. */ - (nullable UIColor *)shadowColorForState:(UIControlState)state; /* Sets the shadow color for a particular control state. @param elevation The shadow color. @param state The control state. */ - (void)setShadowColor:(nullable UIColor *)shadowColor forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /* Returns the title color for a particular control state. If no title color has been set for a given state, the returned value will fall back to the value set for UIControlStateNormal. @param state The control state. @return The title color for the requested state. */ - (nullable UIColor *)titleColorForState:(UIControlState)state; /* Sets the title color for a particular control state. @param titleColor The title color. @param state The control state. */ - (void)setTitleColor:(nullable UIColor *)titleColor forState:(UIControlState)state UI_APPEARANCE_SELECTOR; @end
To:@interface MDCChipView : UIControl /* A UIImageView that leads the title label. */ @property(nonatomic, readonly, nonnull) IBInspectable UIImageView *imageView; /* A UIImageView that leads the title label. Appears in front of the imageView. Only visible when the chip is selected. This image view is typically used to show some icon that denotes the chip as selected, such as a check mark. If imageView has no image then the chip will require resizing when selected or deselected to account for the changing visibility of selectedImageView. */ @property(nonatomic, readonly, nonnull) IBInspectable UIImageView *selectedImageView; /* A UIView that trails the title label. It will be given a size based on the value returned from sizeThatFits:. */ @property(nonatomic, strong, nullable) IBInspectable UIView *accessoryView; /* The title label. @note The title color is controlled by setTitleColor:forState:. @note The title font is controlled by setTitleFont. */ @property(nonatomic, readonly, nonnull) IBInspectable UILabel *titleLabel; /* Padding around the chip content. Each subview can be further padded with their invidual padding property. The chip uses this property to determine intrinsicContentSize and sizeThatFits. Defaults to (4, 4, 4, 4). */ @property(nonatomic, assign) UIEdgeInsets contentPadding UI_APPEARANCE_SELECTOR; /* Padding around the image view. Only used if the image view has a non-nil image. The chip uses this property to determine intrinsicContentSize and sizeThatFits. Defaults to (0, 0, 0, 0). */ @property(nonatomic, assign) UIEdgeInsets imagePadding UI_APPEARANCE_SELECTOR; /* Padding around the accessory view. Only used if the accessory view is non-nil. The chip uses this property to determine intrinsicContentSize and sizeThatFits. Defaults to (0, 0, 0, 0). */ @property(nonatomic, assign) UIEdgeInsets accessoryPadding UI_APPEARANCE_SELECTOR; /* Padding around the title. The chip uses this property to determine intrinsicContentSize and sizeThatFits. Defaults to (3, 8, 4, 8). The top padding is shorter so the default height of a chip is 32 pts. */ @property(nonatomic, assign) UIEdgeInsets titlePadding UI_APPEARANCE_SELECTOR; /* Font used to render the title. If nil, the chip will use the system font. */ @property(nonatomic, strong, nullable) UIFont *titleFont UI_APPEARANCE_SELECTOR; /* This property determines if an @c MDCChipView should use the @c MDCRippleView behavior or not. By setting this property to @c YES, @c MDCStatefulRippleView is used to provide the user visual touch feedback, instead of the legacy @c MDCInkView. @note Defaults to @c NO. */ @property(nonatomic, assign) BOOL enableRippleBehavior; /* The color of the ink ripple. */ @property(nonatomic, strong, null_resettable) UIColor *inkColor UI_APPEARANCE_SELECTOR __deprecated_msg("Use setInkColor:forState:"); /* The shape generator used to define the chip's shape. */ @property(nullable, nonatomic, strong) id<MDCShapeGenerating> shapeGenerator UI_APPEARANCE_SELECTOR; /* Indicates whether the chip should automatically update its font when the device’s UIContentSizeCategory is changed. This property is modeled after the adjustsFontForContentSizeCategory property in the UIContentSizeCategoryAdjusting protocol added by Apple in iOS 10.0. If set to YES, this button will base its text font on MDCFontTextStyleButton. Default value is NO. */ @property(nonatomic, readwrite, setter=mdc_setAdjustsFontForContentSizeCategory:) BOOL mdc_adjustsFontForContentSizeCategory UI_APPEARANCE_SELECTOR; /** The minimum dimensions of the Chip. A non-positive value for either height or width is equivalent to no minimum for that dimension. Defaults to a minimum height of 32 points, and no minimum width. */ @property(nonatomic, assign) CGSize minimumSize UI_APPEARANCE_SELECTOR; /** Custom insets to use when computing touch targets. A positive inset value will shrink the hit area for the Chip. */ @property(nonatomic, assign) UIEdgeInsets hitAreaInsets; /* A color used as the chip's @c backgroundColor for @c state. If no background color has been set for a given state, the returned value will fall back to the value set for UIControlStateNormal. @param state The control state. @return The background color. */ - (nullable UIColor *)backgroundColorForState:(UIControlState)state; /* A color used as the chip's @c backgroundColor. Defaults to blue. @param backgroundColor The background color. @param state The control state. */ - (void)setBackgroundColor:(nullable UIColor *)backgroundColor forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /* Returns the border color for a particular control state. If no border width has been set for a given state, the returned value will fall back to the value set for UIControlStateNormal. @param state The control state. @return The border color for the requested state. */ - (nullable UIColor *)borderColorForState:(UIControlState)state; /* Sets the border color for a particular control state. @param borderColor The border color. @param state The control state. */ - (void)setBorderColor:(nullable UIColor *)borderColor forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /* Returns the border width for a particular control state. If no border width has been set for a given state, the returned value will fall back to the value set for UIControlStateNormal. @param state The control state. @return The border width for the requested state. */ - (CGFloat)borderWidthForState:(UIControlState)state; /* Sets the border width for a particular control state. @param borderWidth The border width. @param state The control state. */ - (void)setBorderWidth:(CGFloat)borderWidth forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /* Returns the elevation for a particular control state. If no elevation has been set for a given state, the returned value will fall back to the value set for UIControlStateNormal. @param state The control state. @return The elevation for the requested state. */ - (MDCShadowElevation)elevationForState:(UIControlState)state; /* Sets the elevation for a particular control state. @param elevation The elevation. @param state The control state. */ - (void)setElevation:(MDCShadowElevation)elevation forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /* Returns the ink color for a particular control state. If no ink color has been set for a given state, the returned value will fall back to the value set for UIControlStateNormal. Defaults to nil. When nil MDCInkView.defaultInkColor is used. @param state The control state. @return The ink color for the requested state. */ - (nullable UIColor *)inkColorForState:(UIControlState)state; /* Sets the ink color for a particular control state. @param inkColor The ink color. @param state The control state. */ - (void)setInkColor:(nullable UIColor *)inkColor forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /* Returns the shadow color for a particular control state. If no shadow color has been set for a given state, the returned value will fall back to the value set for UIControlStateNormal. @param state The control state. @return The shadow color for the requested state. */ - (nullable UIColor *)shadowColorForState:(UIControlState)state; /* Sets the shadow color for a particular control state. @param elevation The shadow color. @param state The control state. */ - (void)setShadowColor:(nullable UIColor *)shadowColor forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /* Returns the title color for a particular control state. If no title color has been set for a given state, the returned value will fall back to the value set for UIControlStateNormal. @param state The control state. @return The title color for the requested state. */ - (nullable UIColor *)titleColorForState:(UIControlState)state; /* Sets the title color for a particular control state. @param titleColor The title color. @param state The control state. */ - (void)setTitleColor:(nullable UIColor *)titleColor forState:(UIControlState)state UI_APPEARANCE_SELECTOR; @end

Component changes

Changes

ActionSheet

Banner

BottomSheet

Cards

Chips

Dialogs

Ripple

TextFields

Multi-component changes


83.0.2

This patch release fixes a crashing bug with ActionSheet during rotation.

Component changes

ActionSheet


83.0.1

This patch release resolves some missing content from the theming extension documentation and removes a broken link.


83.0.0

This major release graduates most Theming Extensions from Beta and includes a breaking change for AppBar's imports. All Themer APIs have been annotated as “to be deprecated” in lieu of Theming extensions. The following Theming Extensions are now generally available:

  • ActionSheet
  • AppBar
  • Buttons
  • Cards
  • Chips
  • Tabs
  • TextFields
  • Container scheme

Breaking changes

AppBar's Theming extension header has changed, so you may need to update your import statements accordingly:

Swift

- import MaterialComponents.MaterialAppBar_MaterialTheming
+ import MaterialComponents.MaterialAppBar_Theming

ObjC

- #import "MaterialAppBar+MaterialTheming.h"
+ #import "MaterialAppBar+Theming.h"

API changes

ActivityIndicator+ColorThemer

MDCActivityIndicatorColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toActivityIndicator: in MDCActivityIndicatorColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCActivityIndicatorColorThemer
To:c:objc(cy)MDCActivityIndicatorColorThemer@ToBeDeprecated

AppBar+ColorThemer

MDCAppBarColorThemer(ToBeDeprecated)

modified class method: +applySurfaceVariantWithColorScheme:toAppBarViewController: in MDCAppBarColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCAppBarColorThemer
To:c:objc(cy)MDCAppBarColorThemer@ToBeDeprecated

modified class method: +applyColorScheme:toAppBarViewController: in MDCAppBarColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCAppBarColorThemer
To:c:objc(cy)MDCAppBarColorThemer@ToBeDeprecated

AppBar+TypographyThemer

MDCAppBarTypographyThemer(ToBeDeprecated)

modified class method: +applyTypographyScheme:toAppBarViewController: in MDCAppBarTypographyThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCAppBarTypographyThemer
To:c:objc(cy)MDCAppBarTypographyThemer@ToBeDeprecated

BottomAppBar+ColorThemer

MDCBottomAppBarColorThemer(ToBeDeprecated)

modified class method: +applySurfaceVariantWithSemanticColorScheme:toBottomAppBarView: in MDCBottomAppBarColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCBottomAppBarColorThemer
To:c:objc(cy)MDCBottomAppBarColorThemer@ToBeDeprecated

BottomNavigation+ColorThemer

MDCBottomNavigationBarColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toBottomNavigation: in MDCBottomNavigationBarColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCBottomNavigationBarColorThemer
To:c:objc(cy)MDCBottomNavigationBarColorThemer@ToBeDeprecated

BottomNavigation+TypographyThemer

MDCBottomNavigationBarTypographyThemer(ToBeDeprecated)

new category: MDCBottomNavigationBarTypographyThemer(ToBeDeprecated)

modified class method: +applyTypographyScheme:toBottomNavigationBar: in MDCBottomNavigationBarTypographyThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCBottomNavigationBarTypographyThemer
To:c:objc(cy)MDCBottomNavigationBarTypographyThemer@ToBeDeprecated

BottomSheet+ShapeThemer

MDCBottomSheetControllerShapeThemer(ToBeDeprecated)

new category: MDCBottomSheetControllerShapeThemer(ToBeDeprecated)

modified class method: +applyShapeScheme:toBottomSheetController: in MDCBottomSheetControllerShapeThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCBottomSheetControllerShapeThemer
To:c:objc(cy)MDCBottomSheetControllerShapeThemer@ToBeDeprecated

ButtonBar+ColorThemer

MDCButtonBarColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toButtonBar: in MDCButtonBarColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCButtonBarColorThemer
To:c:objc(cy)MDCButtonBarColorThemer@ToBeDeprecated

ButtonBar+TypographyThemer

MDCButtonBarTypographyThemer(ToBeDeprecated)

new category: MDCButtonBarTypographyThemer(ToBeDeprecated)

modified class method: +applyTypographyScheme:toButtonBar: in MDCButtonBarTypographyThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCButtonBarTypographyThemer
To:c:objc(cy)MDCButtonBarTypographyThemer@ToBeDeprecated

Buttons+ButtonThemer

MDCOutlinedButtonThemer(ToBeDeprecated)

new category: MDCOutlinedButtonThemer(ToBeDeprecated)

modified class method: +applyScheme:toButton: in MDCOutlinedButtonThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCOutlinedButtonThemer
To:c:objc(cy)MDCOutlinedButtonThemer@ToBeDeprecated

MDCContainedButtonThemer(ToBeDeprecated)

new category: MDCContainedButtonThemer(ToBeDeprecated)

modified class method: +applyScheme:toButton: in MDCContainedButtonThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCContainedButtonThemer
To:c:objc(cy)MDCContainedButtonThemer@ToBeDeprecated

MDCTextButtonThemer(ToBeDeprecated)

new category: MDCTextButtonThemer(ToBeDeprecated)

modified class method: +applyScheme:toButton: in MDCTextButtonThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTextButtonThemer
To:c:objc(cy)MDCTextButtonThemer@ToBeDeprecated

MDCFloatingActionButtonThemer(ToBeDeprecated)

new category: MDCFloatingActionButtonThemer(ToBeDeprecated)

modified class method: +applyScheme:toButton: in MDCFloatingActionButtonThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCFloatingActionButtonThemer
To:c:objc(cy)MDCFloatingActionButtonThemer@ToBeDeprecated

Buttons+ColorThemer

MDCOutlinedButtonColorThemer(ToBeDeprecated)

new category: MDCOutlinedButtonColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toButton: in MDCOutlinedButtonColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCOutlinedButtonColorThemer
To:c:objc(cy)MDCOutlinedButtonColorThemer@ToBeDeprecated

MDCContainedButtonColorThemer(ToBeDeprecated)

new category: MDCContainedButtonColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toButton: in MDCContainedButtonColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCContainedButtonColorThemer
To:c:objc(cy)MDCContainedButtonColorThemer@ToBeDeprecated

MDCTextButtonColorThemer(ToBeDeprecated)

new category: MDCTextButtonColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toButton: in MDCTextButtonColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTextButtonColorThemer
To:c:objc(cy)MDCTextButtonColorThemer@ToBeDeprecated

MDCFloatingButtonColorThemer(ToBeDeprecated)

new category: MDCFloatingButtonColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toButton: in MDCFloatingButtonColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCFloatingButtonColorThemer
To:c:objc(cy)MDCFloatingButtonColorThemer@ToBeDeprecated

Buttons+ShapeThemer

MDCFloatingButtonShapeThemer(ToBeDeprecated)

new category: MDCFloatingButtonShapeThemer(ToBeDeprecated)

modified class method: +applyShapeScheme:toButton: in MDCFloatingButtonShapeThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCFloatingButtonShapeThemer
To:c:objc(cy)MDCFloatingButtonShapeThemer@ToBeDeprecated

MDCButtonShapeThemer(ToBeDeprecated)

new category: MDCButtonShapeThemer(ToBeDeprecated)

modified class method: +applyShapeScheme:toButton: in MDCButtonShapeThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCButtonShapeThemer
To:c:objc(cy)MDCButtonShapeThemer@ToBeDeprecated

Buttons+TypographyThemer

MDCButtonTypographyThemer(ToBeDeprecated)

new category: MDCButtonTypographyThemer(ToBeDeprecated)

modified class method: +applyTypographyScheme:toButton: in MDCButtonTypographyThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCButtonTypographyThemer
To:c:objc(cy)MDCButtonTypographyThemer@ToBeDeprecated

Cards+CardThemer

MDCCardThemer(ToBeDeprecated)

new category: MDCCardThemer(ToBeDeprecated)

modified class method: +applyOutlinedVariantWithScheme:toCardCell: in MDCCardThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCCardThemer
To:c:objc(cy)MDCCardThemer@ToBeDeprecated

modified class method: +applyScheme:toCard: in MDCCardThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCCardThemer
To:c:objc(cy)MDCCardThemer@ToBeDeprecated

modified class method: +applyOutlinedVariantWithScheme:toCard: in MDCCardThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCCardThemer
To:c:objc(cy)MDCCardThemer@ToBeDeprecated

modified class method: +applyScheme:toCardCell: in MDCCardThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCCardThemer
To:c:objc(cy)MDCCardThemer@ToBeDeprecated

Cards+ColorThemer

MDCCardsColorThemer(ToBeDeprecated)

new category: MDCCardsColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toCard: in MDCCardsColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCCardsColorThemer
To:c:objc(cy)MDCCardsColorThemer@ToBeDeprecated

modified class method: +applyOutlinedVariantWithColorScheme:toCardCell: in MDCCardsColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCCardsColorThemer
To:c:objc(cy)MDCCardsColorThemer@ToBeDeprecated

modified class method: +applyOutlinedVariantWithColorScheme:toCard: in MDCCardsColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCCardsColorThemer
To:c:objc(cy)MDCCardsColorThemer@ToBeDeprecated

modified class method: +applySemanticColorScheme:toCardCell: in MDCCardsColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCCardsColorThemer
To:c:objc(cy)MDCCardsColorThemer@ToBeDeprecated

Cards+ShapeThemer

MDCCardsShapeThemer(ToBeDeprecated)

new category: MDCCardsShapeThemer(ToBeDeprecated)

modified class method: +applyShapeScheme:toCardCell: in MDCCardsShapeThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCCardsShapeThemer
To:c:objc(cy)MDCCardsShapeThemer@ToBeDeprecated

modified class method: +applyShapeScheme:toCard: in MDCCardsShapeThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCCardsShapeThemer
To:c:objc(cy)MDCCardsShapeThemer@ToBeDeprecated

Chips+ChipThemer

MDCChipViewThemer(ToBeDeprecated)

new category: MDCChipViewThemer(ToBeDeprecated)

modified class method: +applyScheme:toChipView: in MDCChipViewThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCChipViewThemer
To:c:objc(cy)MDCChipViewThemer@ToBeDeprecated

modified class method: +applyOutlinedVariantWithScheme:toChipView: in MDCChipViewThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCChipViewThemer
To:c:objc(cy)MDCChipViewThemer@ToBeDeprecated

Chips+ColorThemer

MDCChipViewColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toChipView: in MDCChipViewColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCChipViewColorThemer
To:c:objc(cy)MDCChipViewColorThemer@ToBeDeprecated

modified class method: +applyOutlinedVariantWithColorScheme:toChipView: in MDCChipViewColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCChipViewColorThemer
To:c:objc(cy)MDCChipViewColorThemer@ToBeDeprecated

Chips+FontThemer

MDCChipViewFontThemer(ToBeDeprecated)

new category: MDCChipViewFontThemer(ToBeDeprecated)

modified class method: +applyFontScheme:toChipView: in MDCChipViewFontThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCChipViewFontThemer
To:c:objc(cy)MDCChipViewFontThemer@ToBeDeprecated

Chips+ShapeThemer

MDCChipViewShapeThemer(ToBeDeprecated)

new category: MDCChipViewShapeThemer(ToBeDeprecated)

modified class method: +applyShapeScheme:toChipView: in MDCChipViewShapeThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCChipViewShapeThemer
To:c:objc(cy)MDCChipViewShapeThemer@ToBeDeprecated

Dialogs+ColorThemer

MDCAlertColorThemer

modified class method: +applyColorScheme: in MDCAlertColorThemer

Type of change:parent.usr
From:c:objc(cy)MDCAlertColorThemer@ToBeDeprecated
To:c:objc(cs)MDCAlertColorThemer

MDCAlertColorThemer(ToBeDeprecated)

removed category: MDCAlertColorThemer(ToBeDeprecated)

FeatureHighlight+ColorThemer

MDCFeatureHighlightColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toFeatureHighlightViewController: in MDCFeatureHighlightColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCFeatureHighlightColorThemer
To:c:objc(cy)MDCFeatureHighlightColorThemer@ToBeDeprecated

FeatureHighlight+FontThemer

MDCFeatureHighlightFontThemer(ToBeDeprecated)

new category: MDCFeatureHighlightFontThemer(ToBeDeprecated)

modified class method: +applyFontScheme:toFeatureHighlightView: in MDCFeatureHighlightFontThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCFeatureHighlightFontThemer
To:c:objc(cy)MDCFeatureHighlightFontThemer@ToBeDeprecated

FeatureHighlight+TypographyThemer

MDCFeatureHighlightTypographyThemer(ToBeDeprecated)

new category: MDCFeatureHighlightTypographyThemer(ToBeDeprecated)

modified class method: +applyTypographyScheme:toFeatureHighlightViewController: in MDCFeatureHighlightTypographyThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCFeatureHighlightTypographyThemer
To:c:objc(cy)MDCFeatureHighlightTypographyThemer@ToBeDeprecated

FlexibleHeader+ColorThemer

MDCFlexibleHeaderColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toFlexibleHeaderView: in MDCFlexibleHeaderColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCFlexibleHeaderColorThemer
To:c:objc(cy)MDCFlexibleHeaderColorThemer@ToBeDeprecated

modified class method: +applySurfaceVariantWithColorScheme:toFlexibleHeaderView: in MDCFlexibleHeaderColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCFlexibleHeaderColorThemer
To:c:objc(cy)MDCFlexibleHeaderColorThemer@ToBeDeprecated

List+ColorThemer

MDCListColorThemer(ToBeDeprecated)

new category: MDCListColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toBaseCell: in MDCListColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCListColorThemer
To:c:objc(cy)MDCListColorThemer@ToBeDeprecated

modified class method: +applySemanticColorScheme:toSelfSizingStereoCell: in MDCListColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCListColorThemer
To:c:objc(cy)MDCListColorThemer@ToBeDeprecated

List+ListThemer

MDCListThemer(ToBeDeprecated)

new category: MDCListThemer(ToBeDeprecated)

modified class method: +applyScheme:toSelfSizingStereoCell: in MDCListThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCListThemer
To:c:objc(cy)MDCListThemer@ToBeDeprecated

modified class method: +applyScheme:toBaseCell: in MDCListThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCListThemer
To:c:objc(cy)MDCListThemer@ToBeDeprecated

List+TypographyThemer

MDCListTypographyThemer(ToBeDeprecated)

new category: MDCListTypographyThemer(ToBeDeprecated)

modified class method: +applyTypographyScheme:toSelfSizingStereoCell: in MDCListTypographyThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCListTypographyThemer
To:c:objc(cy)MDCListTypographyThemer@ToBeDeprecated

NavigationBar+ColorThemer

MDCNavigationBarColorThemer(ToBeDeprecated)

modified class method: +applySurfaceVariantWithColorScheme:toNavigationBar: in MDCNavigationBarColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCNavigationBarColorThemer
To:c:objc(cy)MDCNavigationBarColorThemer@ToBeDeprecated

modified class method: +applySemanticColorScheme:toNavigationBar: in MDCNavigationBarColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCNavigationBarColorThemer
To:c:objc(cy)MDCNavigationBarColorThemer@ToBeDeprecated

NavigationBar+TypographyThemer

MDCNavigationBarTypographyThemer(ToBeDeprecated)

new category: MDCNavigationBarTypographyThemer(ToBeDeprecated)

modified class method: +applyTypographyScheme:toNavigationBar: in MDCNavigationBarTypographyThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCNavigationBarTypographyThemer
To:c:objc(cy)MDCNavigationBarTypographyThemer@ToBeDeprecated

NavigationDrawer+ColorThemer

MDCBottomDrawerColorThemer(ToBeDeprecated)

new category: MDCBottomDrawerColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toBottomDrawer: in MDCBottomDrawerColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCBottomDrawerColorThemer
To:c:objc(cy)MDCBottomDrawerColorThemer@ToBeDeprecated

Slider+ColorThemer

MDCSliderColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toSlider: in MDCSliderColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCSliderColorThemer
To:c:objc(cy)MDCSliderColorThemer@ToBeDeprecated

Snackbar+ColorThemer

MDCSnackbarColorThemer(Deprecated)

modified class method: +applySemanticColorScheme: in MDCSnackbarColorThemer(Deprecated)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarColorThemer
To:c:objc(cy)MDCSnackbarColorThemer@Deprecated

modified class method: +applySemanticColorScheme:toSnackbarManager: in MDCSnackbarColorThemer(Deprecated)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarColorThemer
To:c:objc(cy)MDCSnackbarColorThemer@Deprecated

Snackbar+FontThemer

MDCSnackbarFontThemer(Deprecated)

new category: MDCSnackbarFontThemer(Deprecated)

modified class method: +applyFontScheme:toSnackbarMessageView: in MDCSnackbarFontThemer(Deprecated)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarFontThemer
To:c:objc(cy)MDCSnackbarFontThemer@Deprecated

modified class method: +applyFontScheme: in MDCSnackbarFontThemer(Deprecated)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarFontThemer
To:c:objc(cy)MDCSnackbarFontThemer@Deprecated

Snackbar+TypographyThemer

MDCSnackbarTypographyThemer(Deprecated)

new category: MDCSnackbarTypographyThemer(Deprecated)

modified class method: +applyTypographyScheme: in MDCSnackbarTypographyThemer(Deprecated)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarTypographyThemer
To:c:objc(cy)MDCSnackbarTypographyThemer@Deprecated

Tabs+ColorThemer

MDCTabBarColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toTabs: in MDCTabBarColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTabBarColorThemer
To:c:objc(cy)MDCTabBarColorThemer@ToBeDeprecated

modified class method: +applySurfaceVariantWithColorScheme:toTabs: in MDCTabBarColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTabBarColorThemer
To:c:objc(cy)MDCTabBarColorThemer@ToBeDeprecated

Tabs+FontThemer

MDCTabBarFontThemer(ToBeDeprecated)

new category: MDCTabBarFontThemer(ToBeDeprecated)

modified class method: +applyFontScheme:toTabBar: in MDCTabBarFontThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTabBarFontThemer
To:c:objc(cy)MDCTabBarFontThemer@ToBeDeprecated

Tabs+TypographyThemer

MDCTabBarTypographyThemer(ToBeDeprecated)

new category: MDCTabBarTypographyThemer(ToBeDeprecated)

modified class method: +applyTypographyScheme:toTabBar: in MDCTabBarTypographyThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTabBarTypographyThemer
To:c:objc(cy)MDCTabBarTypographyThemer@ToBeDeprecated

TextFields+ColorThemer

MDCFilledTextFieldColorThemer(ToBeDeprecated)

new category: MDCFilledTextFieldColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toTextInputControllerFilled: in MDCFilledTextFieldColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCFilledTextFieldColorThemer
To:c:objc(cy)MDCFilledTextFieldColorThemer@ToBeDeprecated

MDCTextFieldColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toTextInput: in MDCTextFieldColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTextFieldColorThemer
To:c:objc(cy)MDCTextFieldColorThemer@ToBeDeprecated

modified class method: +applySemanticColorScheme:toAllTextInputControllersOfClass: in MDCTextFieldColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTextFieldColorThemer
To:c:objc(cy)MDCTextFieldColorThemer@ToBeDeprecated

modified class method: +applySemanticColorScheme:toTextInputController: in MDCTextFieldColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTextFieldColorThemer
To:c:objc(cy)MDCTextFieldColorThemer@ToBeDeprecated

MDCOutlinedTextFieldColorThemer(ToBeDeprecated)

new category: MDCOutlinedTextFieldColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toTextInputController: in MDCOutlinedTextFieldColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCOutlinedTextFieldColorThemer
To:c:objc(cy)MDCOutlinedTextFieldColorThemer@ToBeDeprecated

TextFields+FontThemer

MDCTextFieldFontThemer(ToBeDeprecated)

new category: MDCTextFieldFontThemer(ToBeDeprecated)

modified class method: +applyFontScheme:toAllTextInputControllersOfClass: in MDCTextFieldFontThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTextFieldFontThemer
To:c:objc(cy)MDCTextFieldFontThemer@ToBeDeprecated

modified class method: +applyFontScheme:toTextInputController: in MDCTextFieldFontThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTextFieldFontThemer
To:c:objc(cy)MDCTextFieldFontThemer@ToBeDeprecated

modified class method: +applyFontScheme:toTextField: in MDCTextFieldFontThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTextFieldFontThemer
To:c:objc(cy)MDCTextFieldFontThemer@ToBeDeprecated

TextFields+TypographyThemer

MDCTextFieldTypographyThemer(ToBeDeprecated)

new category: MDCTextFieldTypographyThemer(ToBeDeprecated)

modified class method: +applyTypographyScheme:toAllTextInputControllersOfClass: in MDCTextFieldTypographyThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTextFieldTypographyThemer
To:c:objc(cy)MDCTextFieldTypographyThemer@ToBeDeprecated

modified class method: +applyTypographyScheme:toTextInput: in MDCTextFieldTypographyThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTextFieldTypographyThemer
To:c:objc(cy)MDCTextFieldTypographyThemer@ToBeDeprecated

modified class method: +applyTypographyScheme:toTextInputController: in MDCTextFieldTypographyThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTextFieldTypographyThemer
To:c:objc(cy)MDCTextFieldTypographyThemer@ToBeDeprecated

Component changes

Breaking changes

AppBar

Changes

ActionSheet

ActivityIndicator

AppBar

BottomAppBar

BottomNavigation

BottomSheet

ButtonBar

Buttons

Cards

Chips

Dialogs

FeatureHighlight

FlexibleHeader

HeaderStackView

Ink

List

NavigationBar

NavigationDrawer

PageControl

ProgressView

Slider

Snackbar

Tabs

TextFields

Multi-component changes


82.0.0

In this major release, we dropped support for iOS 8 in all components. We also introduced new method and properties for AppBar, BottomSheet and NavigationDrawer.

Breaking changes

This release drops support for iOS 8 and the library, catalog, examples, and demos may no longer build for iOS 8 targets or may crash even if building succeeds. Clients will need to set their minimum deployment targets to iOS 9 or later.

New features

Add support for MDCAppBarNavigationController delegate to pick a tracking scroll view

An optional delegate method was added to allow clients to specify the controller's tracking scroll view. The delegate may return nil if no appropriate tracking scroll view is present.

Swift

func appBarNavigationController(_ navigationController: MDCAppBarNavigationController,
                              trackingScrollViewFor trackingScrollViewForViewController: UIViewController,
                              suggestedTrackingScrollView: UIScrollView?) -> UIScrollView? {
  return trackingScrollView
}

Objective-C

- (UIScrollView *)appBarNavigationController:(MDCAppBarNavigationController *)navigationController
                  trackingScrollViewForViewController:(UIViewController *)viewController
                          suggestedTrackingScrollView:(UIScrollView *)scrollView {
  return self.trackingScrollView;
}

flashScrollIndicators in BottomSheet

MDCBottomSheetController has a new API that will flash the scroll indicators when the view appears.

Swift

bottomSheet.shouldFlashScrollIndicatorsOnAppearance = true;

Objective-C

self.bottomSheet.shouldFlashScrollIndicatorsOnAppearance = YES;

maximumInitialDrawerHeight in NavigationDrawer

Clients can now override the initial drawer height on MDCBottomDrawerViewController with a desired height in points.

Swift

bottomDrawer.maximumInitialDrawerHeight = 1000;

Objective-C

self.bottomDrawer.maximumInitialDrawerHeight = 1000;

API changes

AppBar

MDCAppBarNavigationControllerDelegate

new method: -appBarNavigationController:trackingScrollViewForViewController:suggestedTrackingScrollView: in MDCAppBarNavigationControllerDelegate

BottomSheet

MDCBottomSheetController

new property: shouldFlashScrollIndicatorsOnAppearance in MDCBottomSheetController

NavigationDrawer

MDCBottomDrawerViewController

new property: maximumInitialDrawerHeight in MDCBottomDrawerViewController

MDCBottomDrawerPresentationController

new property: maximumInitialDrawerHeight in MDCBottomDrawerPresentationController

Tabs+Theming

New extension.

Component changes

Multi-component breaking changes

Changes

AppBar

BottomNavigation

BottomSheet

Buttons

Dialogs

NavigationDrawer

Tabs

TextFields

Multi-component changes


81.1.0

In this minor release we introduced a new beta component, Banner. We also added Ripple support for Buttons, along with text contrast improvements to Tabs and Bottom Navigation.

New features

Ripple integration with Buttons

Buttons now support the latest iteration of the Material Design “ripple” effect. Clients can test this functionality by setting enableRippleBehavior to YES.

Swift

myButton.enableRippleBehavior = true

Objective-C

self.myButton.enableRippleBehavior = YES;

API changes

Banner

New component.

Component changes

Changes

ActionSheet

Banner

BottomNavigation

Buttons

NavigationDrawer

Tabs

TextFields

Multi-component changes


81.0.0

This major release introduces the Ripple component and integrates it with Cards. There are also visual changes for badges on Tabs, multi-line title support for Bottom Navigation, and improved Dynamic Type support for Buttons and Feature Highlight.

Breaking changes

The appearance of badges on MDCTabBar has changed. Badges now appear similar to those on MDCBottomNavigationBar and are, by default, a red “pill” shape with white text. The color can be customized by assigning a value to - UITabBarItem.badgeColor.

New features

Ripple integration with Cards

Cards now support the latest iteration of the Material Design “ripple” effect. Clients can test this functionality by setting enableRippleBehavior to YES.

Swift

myCard.enableRippleBehavior = true

Objective-C

self.myCard.enableRippleBehavior = YES;

Multi-line title support in Bottom Navigation

Clients can enable multi-line title support in MDCBottomNavigationBar by setting titlesNumberOfLines to a value other than 1. This API should be used only as a last resort, when it is not possible to provide shorter titles that fit within the available screen space.

Swift

bottomNavigationBar.titlesNumberOfLines = 0

Objective-C

self.bottomNavigationBar.titlesNumberOfLines = 0;

Automatic Dynamic Type font adjustment in Feature Highlight and Buttons

Buttons and Feature Highlight now support enabling automatic font size adjustment for Dynamic Type when the fonts used by the components have scaling curves attached using MDCFontScaler. Both components use the new scaling if mdc_adjustsFontForContentSizeCategory is set to YES.

Swift

// The new TypographyScheme defaults provide scaled fonts
containerScheme.typographyScheme = MDCTypographyScheme.init(defaults: .material201902)
let button = MDCButton()
button.applyContainedTheme(withScheme: containerScheme)
button.setTitle("Submit", for: UIControlState())
// Enable automatic font adjustment
button.mdc_adjustsFontForContentSizeCategory = true

Objective-C

// The new TypographyScheme defaults provide scaled fonts
self.containerScheme.typographyScheme =
    [[MDCTypographyScheme alloc] initWithDefaults: MDCTypographySchemeDefaultsMaterial201804];
MDCButton *button = [[MDCButton alloc] init];
[button applyContainedThemeWithScheme:self.containerScheme];
[button setTitle:@"Submit" forState:UIControlStateNormal];
// Enable automatic font adjustment
button.mdc_adjustsFontForContentSizeCategory = YES;

API changes

Banner

MDCBannerView

new property: textLabel in MDCBannerView

new property: imageView in MDCBannerView

new property: leadingButton in MDCBannerView

new property: trailingButton in MDCBannerView

removed property: buttons in MDCBannerView

removed property: text in MDCBannerView

removed property: image in MDCBannerView

removed property: numberOfButtons in MDCBannerView

modified class: MDCBannerView

Type of change:Declaration
From:@interface MDCBannerView : UIView @property(nonatomic, copy, nonnull) NSString *text; @property(nonatomic, strong, nullable) UIImage *image; // default is nil @property(nonatomic, assign) NSUInteger numberOfButtons; // default is 1 /** The buttons representing the banner's actions. */ @property(nonatomic, readonly, copy, nonnull) NSArray<MDCButton *> *buttons; @end
To:@interface MDCBannerView : UIView /** A view that displays the text on a @c MDCBannerView The properties of @c textLabel can be used to configure the text shown on @c MDCBannerView. */ @property(nonatomic, readonly, strong, nonnull) UILabel *textLabel; /** A view that displays the image on a @c MDCBannerView. The properties of @c imageView can be used to configure the image shown on @c MDCBannerView. If @c imageView 's own property @c image is @c nil, this view won't show on the @c MDCBannerView. */ @property(nonatomic, readonly, strong, nonnull) UIImageView *imageView; /** A leading button that displays on a @c MDCBannerView. This @c leadingButton is displayed on the leading edge of the view. If it does not fit on the same row as @c trailingButton, it will be placed above @c trailingButton. */ @property(nonatomic, readonly, strong, nonnull) MDCButton *leadingButton; /**s A trailing button that displays on a @c MDCBannerView. This @c trailingButton is displayed on the trailing edge of the view. If it does not fit on the same row as @c leadingButton, it will be placed shows below @c leadingButton. */ @property(nonatomic, readonly, strong, nonnull) MDCButton *trailingButton; @end

BottomNavigation

MDCBottomNavigationBar

new property: titlesNumberOfLines in MDCBottomNavigationBar

Buttons

MDCButton

new property: mdc_legacyFontScaling in MDCButton

Cards

MDCCardCollectionCell

new property: rippleView in MDCCardCollectionCell

new property: dragged in MDCCardCollectionCell

new property: enableRippleBehavior in MDCCardCollectionCell

modified class: MDCCardCollectionCell

Type of change:Declaration
From:@interface MDCCardCollectionCell : UICollectionViewCell /** When selectable is set to YES, a tap on a cell will trigger a visual change between selected and unselected. When it is set to NO, a tap will trigger a normal tap (rather than trigger different visual selection states on the card). Default is set to NO. */ @property(nonatomic, assign, getter=isSelectable) BOOL selectable; /** The corner radius for the card Default is set to 4. */ @property(nonatomic, assign) CGFloat cornerRadius UI_APPEARANCE_SELECTOR; /** The inkView for the card that is initiated on tap */ @property(nonatomic, readonly, strong, nonnull) MDCInkView *inkView; /** This property defines if a card as a whole should be interactable or not. What this means is that when isInteractable is set to NO, there will be no ink ripple and no change in shadow elevation when tapped or selected. Also the card container itself will not be tappable, but any of its subviews will still be tappable. Default is set to YES. Important: Our specification for cards explicitly define a card as being an interactable component. Therefore, this property should be set to NO *only if* there are other interactable items within the card's content, such as buttons or other tappable controls. */ @property(nonatomic, getter=isInteractable) IBInspectable BOOL interactable; /* The shape generator used to define the card cell's shape. When set, layer properties such as cornerRadius and other layer properties are nullified/zeroed. If a layer property is explicitly set after the shapeGenerator has been set, it will lead to unexpected behavior. When the shapeGenerator is nil, MDCCardCollectionCell will use the default underlying layer with its default settings. Default value for shapeGenerator is nil. */ @property(nullable, nonatomic, strong) id<MDCShapeGenerating> shapeGenerator; /** Sets the shadow elevation for an MDCCardViewState state @param shadowElevation The shadow elevation @param state MDCCardCellState the card state */ - (void)setShadowElevation:(MDCShadowElevation)shadowElevation forState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Returns the shadow elevation for an MDCCardViewState state If no elevation has been set for a state, the value for MDCCardCellStateNormal will be returned. Default value for MDCCardCellStateNormal is 1 Default value for MDCCardCellStateHighlighted is 8 Default value for MDCCardCellStateSelected is 8 @param state MDCCardCellStateNormal the card state @return The shadow elevation for the requested state. */ - (MDCShadowElevation)shadowElevationForState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Sets the border width for an MDCCardViewState state @param borderWidth The border width @param state MDCCardCellState the card state */ - (void)setBorderWidth:(CGFloat)borderWidth forState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Returns the border width for an MDCCardCellState state If no border width has been set for a state, the value for MDCCardCellStateNormal will be returned. Default value for MDCCardCellStateNormal is 0 @param state MDCCardCellState the card state @return The border width for the requested state. */ - (CGFloat)borderWidthForState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Sets the border color for an MDCCardCellStateNormal state @param borderColor The border color @param state MDCCardCellState the card state */ - (void)setBorderColor:(nullable UIColor *)borderColor forState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Returns the border color for an MDCCardCellStateNormal state If no border color has been set for a state, it will check the value of UIControlStateNormal. If that value also isn't set, then nil will be returned. @param state MDCCardCellState the card state @return The border color for the requested state. */ - (nullable UIColor *)borderColorForState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Sets the shadow color for an MDCCardCellStateNormal state @param shadowColor The shadow color @param state MDCCardCellState the card state */ - (void)setShadowColor:(nullable UIColor *)shadowColor forState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Returns the shadow color for an MDCCardCellStateNormal state If no color has been set for a state, the value for MDCCardViewStateNormal will be returned. Default value for MDCCardCellStateNormal is blackColor @param state MDCCardCellState the card state @return The shadow color for the requested state. */ - (nullable UIColor *)shadowColorForState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Returns the image for an MDCCardCellStateNormal state. @note The image is only displayed when selectableis YES. If no image has been set for a state, it will check the value of UIControlStateNormal. If that value also isn't set, then nil will be returned. Default value for MDCCardCellStateSelected is ic_check_circle @param state MDCCardCellState the card state @return The image for the requested state. */ - (nullable UIImage *)imageForState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Sets the image for an MDCCardCellStateNormal state @note The image is only displayed whenselectableis YES. @param image The image @param state MDCCardCellState the card state */ - (void)setImage:(nullable UIImage *)image forState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Returns the horizontal image alignment for an MDCCardCellStateNormal state @note The image is only displayed whenselectableis YES. If no alignment has been set for a state, it will check the value of UIControlStateNormal. If that value also isn't set, then MDCCardCellImageHorizontalAlignmentRight will be returned. @param state MDCCardCellState the card state @return The horizontal alignment for the requested state. */ - (MDCCardCellHorizontalImageAlignment)horizontalImageAlignmentForState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Sets the image alignment for an MDCCardCellStateNormal state @note The image is only displayed whenselectableis YES. @param horizontalImageAlignment The image alignment @param state MDCCardCellState the card state */ - (void)setHorizontalImageAlignment:(MDCCardCellHorizontalImageAlignment)horizontalImageAlignment forState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Returns the vertical image alignment for an MDCCardCellStateNormal state @note The image is only displayed whenselectableis YES. If no alignment has been set for a state, it will check the value of UIControlStateNormal. If that value also isn't set, then MDCCardCellImageVerticalAlignmentTop will be returned. @param state MDCCardCellState the card state @return The vertical alignment for the requested state. */ - (MDCCardCellVerticalImageAlignment)verticalImageAlignmentForState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Sets the image alignment for an MDCCardCellStateNormal state @note The image is only displayed whenselectableis YES. @param verticalImageAlignment The image alignment @param state MDCCardCellState the card state */ - (void)setVerticalImageAlignment:(MDCCardCellVerticalImageAlignment)verticalImageAlignment forState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Returns the image tint color for an MDCCardCellStateNormal state @note The image is only displayed whenselectableis YES. If no tint color has been set for a state, it will check the value of UIControlStateNormal. If that value also isn't set, then nil will be returned. @param state MDCCardCellState the card state @return The image tint color for the requested state. */ - (nullable UIColor *)imageTintColorForState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Sets the image tint color for an MDCCardCellStateNormal state @note The image is only displayed whenselectable is YES. @param imageTintColor The image tint color @param state MDCCardCellState the card state */ - (void)setImageTintColor:(nullable UIColor *)imageTintColor forState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** The state of the card cell. Default is MDCCardCellStateNormal. */ @property(nonatomic, readonly) MDCCardCellState state; @end
To:@interface MDCCardCollectionCell : UICollectionViewCell /** When selectable is set to YES, a tap on a cell will trigger a visual change between selected and unselected. When it is set to NO, a tap will trigger a normal tap (rather than trigger different visual selection states on the card). Default is set to NO. */ @property(nonatomic, assign, getter=isSelectable) BOOL selectable; /** A Boolean value indicating whether the card is in the dragged state. */ @property(nonatomic, getter=isDragged) BOOL dragged; /** The corner radius for the card Default is set to 4. */ @property(nonatomic, assign) CGFloat cornerRadius UI_APPEARANCE_SELECTOR; /** The inkView for the card that is initiated on tap */ @property(nonatomic, readonly, strong, nonnull) MDCInkView *inkView; /** The rippleView for the card that is initiated on tap. The ripple view is the successor of ink view, and can be used by setting enableRippleBehaviorto YES after initializing the card. */ @property(nonatomic, readonly, strong, nonnull) MDCStatefulRippleView *rippleView; /** This property defines if a card as a whole should be interactable or not. What this means is that when isInteractable is set to NO, there will be no ink ripple and no change in shadow elevation when tapped or selected. Also the card container itself will not be tappable, but any of its subviews will still be tappable. Default is set to YES. Important: Our specification for cards explicitly define a card as being an interactable component. Therefore, this property should be set to NO *only if* there are other interactable items within the card's content, such as buttons or other tappable controls. */ @property(nonatomic, getter=isInteractable) IBInspectable BOOL interactable; /* The shape generator used to define the card cell's shape. When set, layer properties such as cornerRadius and other layer properties are nullified/zeroed. If a layer property is explicitly set after the shapeGenerator has been set, it will lead to unexpected behavior. When the shapeGenerator is nil, MDCCardCollectionCell will use the default underlying layer with its default settings. Default value for shapeGenerator is nil. */ @property(nullable, nonatomic, strong) id<MDCShapeGenerating> shapeGenerator; /** By setting this property to YES, you will enable and use inkView's successor rippleView as the main view to provide visual feedback for taps. It is recommended to set this property right after initializing the card. Defaults to NO. */ @property(nonatomic, assign) BOOL enableRippleBehavior; /** Sets the shadow elevation for an MDCCardViewState state @param shadowElevation The shadow elevation @param state MDCCardCellState the card state */ - (void)setShadowElevation:(MDCShadowElevation)shadowElevation forState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Returns the shadow elevation for an MDCCardViewState state If no elevation has been set for a state, the value for MDCCardCellStateNormal will be returned. Default value for MDCCardCellStateNormal is 1 Default value for MDCCardCellStateHighlighted is 8 Default value for MDCCardCellStateSelected is 8 @param state MDCCardCellStateNormal the card state @return The shadow elevation for the requested state. */ - (MDCShadowElevation)shadowElevationForState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Sets the border width for an MDCCardViewState state @param borderWidth The border width @param state MDCCardCellState the card state */ - (void)setBorderWidth:(CGFloat)borderWidth forState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Returns the border width for an MDCCardCellState state If no border width has been set for a state, the value for MDCCardCellStateNormal will be returned. Default value for MDCCardCellStateNormal is 0 @param state MDCCardCellState the card state @return The border width for the requested state. */ - (CGFloat)borderWidthForState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Sets the border color for an MDCCardCellStateNormal state @param borderColor The border color @param state MDCCardCellState the card state */ - (void)setBorderColor:(nullable UIColor *)borderColor forState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Returns the border color for an MDCCardCellStateNormal state If no border color has been set for a state, it will check the value of UIControlStateNormal. If that value also isn't set, then nil will be returned. @param state MDCCardCellState the card state @return The border color for the requested state. */ - (nullable UIColor *)borderColorForState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Sets the shadow color for an MDCCardCellStateNormal state @param shadowColor The shadow color @param state MDCCardCellState the card state */ - (void)setShadowColor:(nullable UIColor *)shadowColor forState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Returns the shadow color for an MDCCardCellStateNormal state If no color has been set for a state, the value for MDCCardViewStateNormal will be returned. Default value for MDCCardCellStateNormal is blackColor @param state MDCCardCellState the card state @return The shadow color for the requested state. */ - (nullable UIColor *)shadowColorForState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Returns the image for an MDCCardCellStateNormal state. @note The image is only displayed whenselectableis YES. If no image has been set for a state, it will check the value of UIControlStateNormal. If that value also isn't set, then nil will be returned. Default value for MDCCardCellStateSelected is ic_check_circle @param state MDCCardCellState the card state @return The image for the requested state. */ - (nullable UIImage *)imageForState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Sets the image for an MDCCardCellStateNormal state @note The image is only displayed whenselectableis YES. @param image The image @param state MDCCardCellState the card state */ - (void)setImage:(nullable UIImage *)image forState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Returns the horizontal image alignment for an MDCCardCellStateNormal state @note The image is only displayed whenselectableis YES. If no alignment has been set for a state, it will check the value of UIControlStateNormal. If that value also isn't set, then MDCCardCellImageHorizontalAlignmentRight will be returned. @param state MDCCardCellState the card state @return The horizontal alignment for the requested state. */ - (MDCCardCellHorizontalImageAlignment)horizontalImageAlignmentForState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Sets the image alignment for an MDCCardCellStateNormal state @note The image is only displayed whenselectableis YES. @param horizontalImageAlignment The image alignment @param state MDCCardCellState the card state */ - (void)setHorizontalImageAlignment:(MDCCardCellHorizontalImageAlignment)horizontalImageAlignment forState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Returns the vertical image alignment for an MDCCardCellStateNormal state @note The image is only displayed whenselectableis YES. If no alignment has been set for a state, it will check the value of UIControlStateNormal. If that value also isn't set, then MDCCardCellImageVerticalAlignmentTop will be returned. @param state MDCCardCellState the card state @return The vertical alignment for the requested state. */ - (MDCCardCellVerticalImageAlignment)verticalImageAlignmentForState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Sets the image alignment for an MDCCardCellStateNormal state @note The image is only displayed whenselectableis YES. @param verticalImageAlignment The image alignment @param state MDCCardCellState the card state */ - (void)setVerticalImageAlignment:(MDCCardCellVerticalImageAlignment)verticalImageAlignment forState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Returns the image tint color for an MDCCardCellStateNormal state @note The image is only displayed whenselectableis YES. If no tint color has been set for a state, it will check the value of UIControlStateNormal. If that value also isn't set, then nil will be returned. @param state MDCCardCellState the card state @return The image tint color for the requested state. */ - (nullable UIColor *)imageTintColorForState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** Sets the image tint color for an MDCCardCellStateNormal state @note The image is only displayed whenselectable is YES. @param imageTintColor The image tint color @param state MDCCardCellState the card state */ - (void)setImageTintColor:(nullable UIColor *)imageTintColor forState:(MDCCardCellState)state UI_APPEARANCE_SELECTOR; /** The state of the card cell. Default is MDCCardCellStateNormal. */ @property(nonatomic, readonly) MDCCardCellState state; @end

MDCCard

new property: rippleView in MDCCard

new property: enableRippleBehavior in MDCCard

modified class: MDCCard

Type of change:Declaration
From:@interface MDCCard : UIControl /** The corner radius for the card Default is set to 4. */ @property(nonatomic, assign) CGFloat cornerRadius UI_APPEARANCE_SELECTOR; /** The inkView for the card that is initiated on tap */ @property(nonatomic, readonly, strong, nonnull) MDCInkView *inkView; /** This property defines if a card as a whole should be interactable or not. What this means is that when isInteractable is set to NO, there will be no ink ripple and no change in shadow elevation when tapped or selected. Also the card container itself will not be tappable, but any of its subviews will still be tappable. Default is set to YES. Important: Our specification for cards explicitly define a card as being an interactable component. Therefore, this property should be set to NO *only if* there are other interactable items within the card's content, such as buttons or other tappable controls. */ @property(nonatomic, getter=isInteractable) IBInspectable BOOL interactable; /** Sets the shadow elevation for an UIControlState state @param shadowElevation The shadow elevation @param state UIControlState the card state */ - (void)setShadowElevation:(MDCShadowElevation)shadowElevation forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** Returns the shadow elevation for an UIControlState state If no elevation has been set for a state, the value for UIControlStateNormal will be returned. Default value for UIControlStateNormal is 1 Default value for UIControlStateHighlighted is 8 @param state UIControlState the card state @return The shadow elevation for the requested state. */ - (MDCShadowElevation)shadowElevationForState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** Sets the border width for an UIControlState state @param borderWidth The border width @param state UIControlState the card state */ - (void)setBorderWidth:(CGFloat)borderWidth forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** Returns the border width for an UIControlState state If no border width has been set for a state, the value for UIControlStateNormal will be returned. Default value for UIControlStateNormal is 0 @param state UIControlState the card state @return The border width for the requested state. */ - (CGFloat)borderWidthForState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** Sets the border color for an UIControlState state @param borderColor The border color @param state UIControlState the card state */ - (void)setBorderColor:(nullable UIColor *)borderColor forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** Returns the border color for an UIControlState state If no border color has been set for a state, it will check the value of UIControlStateNormal. If that value also isn't set, then nil will be returned. @param state UIControlState the card state @return The border color for the requested state. */ - (nullable UIColor *)borderColorForState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** Sets the shadow color for an UIControlState state @param shadowColor The shadow color @param state UIControlState the card state */ - (void)setShadowColor:(nullable UIColor *)shadowColor forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** Returns the shadow color for an UIControlState state If no color has been set for a state, the value for MDCCardViewStateNormal will be returned. Default value for UIControlStateNormal is blackColor @param state UIControlState the card state @return The shadow color for the requested state. */ - (nullable UIColor *)shadowColorForState:(UIControlState)state UI_APPEARANCE_SELECTOR; /* The shape generator used to define the card's shape. When set, layer properties such as cornerRadius and other layer properties are nullified/zeroed. If a layer property is explicitly set after the shapeGenerator has been set, it will lead to unexpected behavior. When the shapeGenerator is nil, MDCCard will use the default underlying layer with its default settings. Default value for shapeGenerator is nil. */ @property(nullable, nonatomic, strong) id<MDCShapeGenerating> shapeGenerator; @end
To:@interface MDCCard : UIControl /** The corner radius for the card Default is set to 4. */ @property(nonatomic, assign) CGFloat cornerRadius UI_APPEARANCE_SELECTOR; /** The inkView for the card that is initiated on tap */ @property(nonatomic, readonly, strong, nonnull) MDCInkView *inkView; /** The rippleView for the card that is initiated on tap. The ripple view is the successor of ink view, and can be used by setting enableRippleBehavior to YES after initializing the card. */ @property(nonatomic, readonly, strong, nonnull) MDCStatefulRippleView *rippleView; /** This property defines if a card as a whole should be interactable or not. What this means is that when isInteractable is set to NO, there will be no ink ripple and no change in shadow elevation when tapped or selected. Also the card container itself will not be tappable, but any of its subviews will still be tappable. Default is set to YES. Important: Our specification for cards explicitly define a card as being an interactable component. Therefore, this property should be set to NO *only if* there are other interactable items within the card's content, such as buttons or other tappable controls. */ @property(nonatomic, getter=isInteractable) IBInspectable BOOL interactable; /** By setting this property to YES, you will enable and use inkView's successor rippleView as the main view to provide visual feedback for taps. It is recommended to set this property right after initializing the card. Defaults to NO. */ @property(nonatomic, assign) BOOL enableRippleBehavior; /** Sets the shadow elevation for an UIControlState state @param shadowElevation The shadow elevation @param state UIControlState the card state */ - (void)setShadowElevation:(MDCShadowElevation)shadowElevation forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** Returns the shadow elevation for an UIControlState state If no elevation has been set for a state, the value for UIControlStateNormal will be returned. Default value for UIControlStateNormal is 1 Default value for UIControlStateHighlighted is 8 @param state UIControlState the card state @return The shadow elevation for the requested state. */ - (MDCShadowElevation)shadowElevationForState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** Sets the border width for an UIControlState state @param borderWidth The border width @param state UIControlState the card state */ - (void)setBorderWidth:(CGFloat)borderWidth forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** Returns the border width for an UIControlState state If no border width has been set for a state, the value for UIControlStateNormal will be returned. Default value for UIControlStateNormal is 0 @param state UIControlState the card state @return The border width for the requested state. */ - (CGFloat)borderWidthForState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** Sets the border color for an UIControlState state @param borderColor The border color @param state UIControlState the card state */ - (void)setBorderColor:(nullable UIColor *)borderColor forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** Returns the border color for an UIControlState state If no border color has been set for a state, it will check the value of UIControlStateNormal. If that value also isn't set, then nil will be returned. @param state UIControlState the card state @return The border color for the requested state. */ - (nullable UIColor *)borderColorForState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** Sets the shadow color for an UIControlState state @param shadowColor The shadow color @param state UIControlState the card state */ - (void)setShadowColor:(nullable UIColor *)shadowColor forState:(UIControlState)state UI_APPEARANCE_SELECTOR; /** Returns the shadow color for an UIControlState state If no color has been set for a state, the value for MDCCardViewStateNormal will be returned. Default value for UIControlStateNormal is blackColor @param state UIControlState the card state @return The shadow color for the requested state. */ - (nullable UIColor *)shadowColorForState:(UIControlState)state UI_APPEARANCE_SELECTOR; /* The shape generator used to define the card's shape. When set, layer properties such as cornerRadius and other layer properties are nullified/zeroed. If a layer property is explicitly set after the shapeGenerator has been set, it will lead to unexpected behavior. When the shapeGenerator is nil, MDCCard will use the default underlying layer with its default settings. Default value for shapeGenerator is nil. */ @property(nullable, nonatomic, strong) id<MDCShapeGenerating> shapeGenerator; @end

FeatureHighlight

MDCFeatureHighlightView

new property: mdc_legacyFontScaling in MDCFeatureHighlightView

modified class: MDCFeatureHighlightView

Type of change:Declaration
From:@interface MDCFeatureHighlightView : UIView @property(nonatomic, strong, nullable) UIColor *innerHighlightColor UI_APPEARANCE_SELECTOR; @property(nonatomic, strong, nullable) UIColor *outerHighlightColor UI_APPEARANCE_SELECTOR; @property(nonatomic, strong, nullable) UIFont *titleFont UI_APPEARANCE_SELECTOR; @property(nonatomic, strong, nullable) UIColor *titleColor UI_APPEARANCE_SELECTOR; @property(nonatomic, strong, nullable) UIFont *bodyFont UI_APPEARANCE_SELECTOR; @property(nonatomic, strong, nullable) UIColor *bodyColor UI_APPEARANCE_SELECTOR; /* Indicates whether the view's contents should automatically update their font when the device’s UIContentSizeCategory changes. This property is modeled after the adjustsFontForContentSizeCategory property in the UIContentSizeCategoryAdjusting protocol added by Apple in iOS 10.0. Default value is NO. */ @property(nonatomic, readwrite, setter=mdc_setAdjustsFontForContentSizeCategory:) BOOL mdc_adjustsFontForContentSizeCategory UI_APPEARANCE_SELECTOR; @end
To:@interface MDCFeatureHighlightView : UIView @property(nonatomic, strong, nullable) UIColor *innerHighlightColor UI_APPEARANCE_SELECTOR; @property(nonatomic, strong, nullable) UIColor *outerHighlightColor UI_APPEARANCE_SELECTOR; @property(nonatomic, strong, nullable) UIFont *titleFont UI_APPEARANCE_SELECTOR; @property(nonatomic, strong, nullable) UIColor *titleColor UI_APPEARANCE_SELECTOR; @property(nonatomic, strong, nullable) UIFont *bodyFont UI_APPEARANCE_SELECTOR; @property(nonatomic, strong, nullable) UIColor *bodyColor UI_APPEARANCE_SELECTOR; /* Indicates whether the view's contents should automatically update their font when the device’s UIContentSizeCategory changes. This property is modeled after the adjustsFontForContentSizeCategory property in the UIContentSizeCategoryAdjusting protocol added by Apple in iOS 10.0. Default value is NO. */ @property(nonatomic, readwrite, setter=mdc_setAdjustsFontForContentSizeCategory:) BOOL mdc_adjustsFontForContentSizeCategory UI_APPEARANCE_SELECTOR; /** Enable legacy font scaling curves for Dynamic Type Default value is NO. */ @property(nonatomic, readwrite, setter=mdc_setLegacyFontScaling:) BOOL mdc_legacyFontScaling; @end

MDCFeatureHighlightViewController

new property: mdc_legacyFontScaling in MDCFeatureHighlightViewController

Ripple

MDCRippleTouchController

new method: -addRippleToView: in MDCRippleTouchController

modified method: -init in MDCRippleTouchController

Type of change:key.always_unavailable
From:1
To:0

MDCRippleTouchControllerDelegate

new method: -rippleTouchController:insertRippleView:intoView: in MDCRippleTouchControllerDelegate

Component changes

Changes

AppBar

BottomNavigation

Buttons

FeatureHighlight

Ripple

Tabs


80.0.0

This major release introduces Dynamic Type support for Typography Schemes as well as UIFontMetrics-like support for Dynamic Type for Material Typography. It also includes snapshot tests for additional components and less-restrictive badging for Tabs.

Breaking changes

MDCTypographyScheming has a new non-optional API, mdc_adjustsFontForContentSizeCategory that is YES if the returned fonts should use the new Dynamic Type APIs available from Material Typography. Existing implementations may wish to migrate (at least initially) by returning NO as a read-only value until support can be added.

- (void)mdc_adjustsFontForContentSizeCategory {
  return NO;
}
public var mdc_adjustsFontForContentSizeCategory: Bool {
  return false;
}

New features

Improved Dynamic Type Support

The Typography and TypographyScheme components have been updated for improved Dynamic Type support. Most clients will make use of this support through MDCTypographyScheme, though it is possible to create scalable fonts manually via MDCFontScaler within Typography. The new scaling curves have been updated for last year's refresh of Material Design typography and font values.

Objective-C

// Typography Scheme is the most typical way to receive scalable fonts.
MDCTypographyScheme *typographyScheme = [[MDCTypographyScheme alloc] initWithDefaults:MDCTypographySchemeDefaultsMaterial201902];
UIFont *scaledBody1Font = [typographyScheme.body1 mdc_scaledFontForCurrentSizeCategory];

// If Typography Schemes aren't used, it's possible to create the fonts manually.
// Initial set-up to apply scaling curves to a base UIFont.
UIFont *baseFont = [UIFont systemFontOfSize:18.0];
MDCFontScaler *body2Scaler = [[MDCFontScaler alloc] initForMaterialTextStyle:MDCTextStyleBody2];
UIFont *scalableFont = [body2Scaler scaledFontWithFont:baseFont];

// Now UIFonts appropriate for Dynamic Type size categories can be created anywhere.
UIFont *baseFontScaledToDefault = [scalableFont mdc_scaledFontAtDefaultSize];
UIFont *baseFontScaledForExtraLarge = [scalableFont mdc_scaledFontForSizeCategory:UIContentSizeCategoryExtraLarge];
UIFont *baseFontScaledForCurrentSizeCategory = [scalableFont mdc_scaledFontForCurrentSizeCategory];

Swift

// Typography Scheme is the most typical way to receive scalable fonts.
let typographyScheme = MDCTypographyScheme(defaults: .material201902)
let scaledBody1Font = typographyScheme.body1.mdc_scaledFontForCurrentSizeCategory()

// If Typography Schemes aren't used, it's possible to create the fonts manually.
// Initial set-up to apply scaling curves to a base UIFont.
let baseFont = UIFont.systemFont(ofSize: 18)
let body2Scaler = MDCFontScaler(forMaterialTextStyle: .body2)
let scalableFont = body2Scaler.scaledFont(with: baseFont)

// Now UIFonts appropriate for Dynamic Type size categories can be created anywhere.
let baseFontScaledToDefault = scalableFont.mdc_scaledFontAtDefaultSize()
let baseFontScaledForExtraLarge = scalableFont.mdc_scaledFont(forSizeCategory: .extraLarge)
let baseFontScaledForCurrentSizeCategory = scalableFont.mdc_scaledFontForCurrentSizeCategory()

API changes

Typography

MDCTextStyleButton

new constant: MDCTextStyleButton

MDCTextStyleCaption

new constant: MDCTextStyleCaption

MDCTextStyleSubtitle2

new constant: MDCTextStyleSubtitle2

MDCTextStyleSubtitle1

new constant: MDCTextStyleSubtitle1

MDCTextStyleBody1

new constant: MDCTextStyleBody1

UIFont(MaterialScalable)

new method: -mdc_scaledFontForCurrentSizeCategory in UIFont(MaterialScalable)

new method: -mdc_scaledFontAtDefaultSize in UIFont(MaterialScalable)

new method: -mdc_scaledFontForSizeCategory: in UIFont(MaterialScalable)

new category: UIFont(MaterialScalable)

new property: mdc_scalingCurve in UIFont(MaterialScalable)

MDCFontScaler

new class method: +scalerForMaterialTextStyle: in MDCFontScaler

new method: -scaledValueForValue: in MDCFontScaler

new class: MDCFontScaler

new method: -init in MDCFontScaler

new method: -initForMaterialTextStyle: in MDCFontScaler

new method: -scaledFontWithFont: in MDCFontScaler

MDCTextStyleHeadline4

new constant: MDCTextStyleHeadline4

MDCTextStyleHeadline3

new constant: MDCTextStyleHeadline3

MDCTextStyleHeadline2

new constant: MDCTextStyleHeadline2

MDCTextStyleHeadline6

new constant: MDCTextStyleHeadline6

MDCTextStyleBody2

new constant: MDCTextStyleBody2

MDCTextStyle

new typedef: MDCTextStyle

MDCTextStyleOverline

new constant: MDCTextStyleOverline

MDCTextStyleHeadline1

new constant: MDCTextStyleHeadline1

MDCTextStyleHeadline5

new constant: MDCTextStyleHeadline5

TypographyScheme

MDCTypographySchemeDefaults

new enum value: MDCTypographySchemeDefaultsMaterial201902 in MDCTypographySchemeDefaults

MDCTypographyScheme

new property: mdc_adjustsFontForContentSizeCategory in MDCTypographyScheme

MDCTypographyScheming

new property: mdc_adjustsFontForContentSizeCategory in MDCTypographyScheming

Component changes

Changes

ActivityIndicator

AppBar

Buttons

HeaderStackView

Ripple

ShapeLibrary

Shapes

Tabs

Typography

schemes/Typography


79.3.0

This minor release fixes a bug in MDCButton's accessibilityTraits value. A recent change introduced a bug that disabled the default behavior of accessibilityTraits and so they would not automatically be updated when the button was disabled.

Changes

Buttons


79.2.0

This minor release introduces a bug fix and new API to Flexible Header, Beta Theming Extensions for App Bar and Text Fields, and additional component snapshot tests.

New features

MDCFlexibleHeaderView has a new API that can be called from UIScrollViewDelegates to notify it of updated adjusted content inset values.

func scrollViewDidChangeAdjustedContentInset(_ scrollView: UIScrollView) {
    if #available(iOS 11.0, *) {
      self.appBarViewController.headerView.trackingScrollDidChangeAdjustedContentInset(scrollView)
    }
  }
- (void)scrollViewDidChangeAdjustedContentInset:(UIScrollView *)scrollView {
  if (@available(iOS 11.0, *)) {
    [self.appBarViewController.headerView
        trackingScrollViewDidChangeAdjustedContentInset:scrollView];
  }
}

API changes

AppBar+MaterialTheming

New extension.

FlexibleHeader

MDCFlexibleHeaderView

new method: -trackingScrollViewDidChangeAdjustedContentInset: in MDCFlexibleHeaderView

MDCFlexibleHeaderView()

new category: MDCFlexibleHeaderView()

removed category: MDCFlexibleHeaderView()

modified property: contentView in MDCFlexibleHeaderView()

Type of change:parent.usr
From:c:objc(ext)[email protected]@14987
To:c:objc(ext)[email protected]@15448

TextFields+Theming

New extension.

Changes

ActionSheet

AppBar

BottomNavigation

FlexibleHeader

Ink

ShadowElevations

ShadowLayer

TextFields

private/Snapshot

Multi-component changes


79.1.1

This patch release fixes a bug in BottomNavigation where the icons were not showing up correctly.

Bugs closed in this release

API changes

Component changes

BottomNavigation


79.1.0

This minor release increases our snapshot testing coverage and introduces a migration flag for including UIAccessibilityTraitButton in MDCButton's accessibilityTraits.

New features

It is now possible to set accessibilityTraits on MDCButton to a custom value that does not include UIAccessibilityTraitButton. To enable this new behavior you must first set accessibilityTraitsIncludesButton = NO. This flag will eventually default to NO and then be deprecated/deleted.

API changes

Buttons

MDCButton

new property: accessibilityTraitsIncludesButton in MDCButton

Changes

ActionSheet

ActivityIndicator

BottomNavigation

Buttons

Collections

List

NavigationBar

PageControl

ProgressView

Ripple

Snackbar

Tabs

Typography

Multi-component changes


79.0.1

This patch release removes NS_REQUIRES_SUPER from several MDCCollectionViewController APIs, removing the requirement to call super.

API changes

Collections

MDCCollectionViewController

Type of change:Declaration
From:- (void)collectionView:(nonnull UICollectionView *)collectionView didHighlightItemAtIndexPath:(nonnull NSIndexPath *)indexPath NS_REQUIRES_SUPER;
To:- (void)collectionView:(nonnull UICollectionView *)collectionView didHighlightItemAtIndexPath:(nonnull NSIndexPath *)indexPath;

Component changes

Collections


79.0.0

This major release introduces breaking changes for Swift code that makes use of the MDCContainerScheme and MDCContainerScheming types. It also includes breaking changes for Shapes header files and completes the graduation of Shapes to a production-ready state.

Breaking changes

MDCContainerScheming‘s and MDCContainerScheme’s colorScheme and typographyScheme are now both nonnull. This change will require changes in Swift code that make use of these APIs.

All Shapes headers have been renamed, dropping their New suffix where applicable.

New features

BottomNavigation

BottomNavigation has two new properties: sizeThatFitsIncludesSafeArea and barItemsBottomAnchor.

See components/BottomNavigation/README.md for more details on the sizeThatFitsIncludesSafeArea property.

barItemsBottomAnchor allows anchoring the Bottom Navigation bar to the safe area layout guide. This API is available on iOS 9.0 and above. Example usage:

if (@available(iOS 11.0, *)) {
  [navigationBar.barItemsBottomAnchor
      constraintEqualToAnchor:view.safeAreaLayoutGuide.bottomAnchor]
      .active = YES;
}

FlexibleHeader

MDCFlexibleHeaderViewController introduces a new safeAreaDelegate that can be used to change which view controller is used when extracting top safe area insets.

API changes

BottomNavigation

MDCBottomNavigationBar

new property: sizeThatFitsIncludesSafeArea in MDCBottomNavigationBar

new property: barItemsBottomAnchor in MDCBottomNavigationBar

FlexibleHeader

MDCFlexibleHeaderSafeAreaDelegate

new method: -flexibleHeaderViewControllerTopSafeAreaInsetViewController: in MDCFlexibleHeaderSafeAreaDelegate

new protocol: MDCFlexibleHeaderSafeAreaDelegate

MDCFlexibleHeaderViewController

new property: safeAreaDelegate in MDCFlexibleHeaderViewController

ContainerScheme

MDCContainerScheming

modified property: colorScheme in MDCContainerScheming

Type of change:Swift declaration
From:var colorScheme: Any? { get }
To:var colorScheme: Any { get }

modified property: colorScheme in MDCContainerScheming

Type of change:Declaration
From:@property (readonly, nonatomic, nullable) id colorScheme;
To:@property (readonly, nonatomic, nonnull) id colorScheme;

modified property: typographyScheme in MDCContainerScheming

Type of change:Swift declaration
From:var typographyScheme: Any? { get }
To:var typographyScheme: Any { get }

modified property: typographyScheme in MDCContainerScheming

Type of change:Declaration
From:@property (readonly, nonatomic, nullable) id typographyScheme;
To:@property (readonly, nonatomic, nonnull) id typographyScheme;

MDCContainerScheme

modified property: colorScheme in MDCContainerScheme

Type of change:Swift declaration
From:var colorScheme: UnsafeMutablePointer<Int32>? { get set }
To:var colorScheme: UnsafeMutablePointer<Int32> { get set }

modified property: colorScheme in MDCContainerScheme

Type of change:Declaration
From:@property(nonatomic, nullable, readwrite) MDCSemanticColorScheme *colorScheme
To:@property (assign, readwrite, nonatomic, nonnull) int *colorScheme;

modified property: shapeScheme in MDCContainerScheme

Type of change:Declaration
From:@property(nonatomic, nullable, readwrite) MDCShapeScheme *shapeScheme
To:@property (assign, readwrite, nonatomic, nullable) int *shapeScheme;

modified property: typographyScheme in MDCContainerScheme

Type of change:Swift declaration
From:var typographyScheme: UnsafeMutablePointer<Int32>? { get set }
To:var typographyScheme: UnsafeMutablePointer<Int32> { get set }

modified property: typographyScheme in MDCContainerScheme

Type of change:Declaration
From:@property(nonatomic, nullable, readwrite) MDCTypographyScheme *typographyScheme
To:@property (assign, readwrite, nonatomic, nonnull) int *typographyScheme;

Component changes

Changes

BottomAppBar

BottomNavigation

Dialogs

FlexibleHeader

NavigationDrawer

PageControl

Multi-component changes


78.0.1

In this patch release we have provided a ChipTextField example along with some Beta theming bug fixes.

Changes

ActionSheet

Dialogs

Ripple

Multi-component changes


78.0.0

This major release promotes the Shape libraries from private to ready, as well as promoting Action Sheet to ready by migrating it from the MaterialComponentsBeta podspec to the MaterialComponents main podspec. Lastly, we've increased our snapshot test coverage across multiple components.

Breaking changes

Moving both Shape libraries, Shapes and ShapeLibrary, from components/private/ to components/ is a breaking change. Clients need to migrate over and update their imports to point to the new location of the Shape libraries.

API changes

ActionSheet

New component - promoted to Ready.

ShapeLibrary

New component - Migrated to components/ from components/private.

Shapes

New component - Migrated to components/ from components/private.

Component changes

Multi-component breaking changes

Changes

ActionSheet

BottomAppBar

ButtonBar

Buttons

Cards

Dialogs

NavigationDrawer

Ripple

Shapes

Slider

TextFields

Multi-component changes


77.0.0

In this release we made improvements to BottomNavigationBar and landed stateful ripple in the ripple (beta) component.

Breaking changes

BottomNavigationBar

Removed a deprecated API:

@property(nonatomic, assign) UIEdgeInsets itemsContentInsets

New features

BottomNavigationBar

Blur

BottomNavigation can use blur in its background when not fully opaque

self.bottomNavBar.backgroundBlurEnabled = YES;

Long item titles

We automatically truncate titles that go out of bounds but added a flag to allow some clients to still overflow.

self.navigationBar.truncatesLongTitles = NO;

Stateful Ripple

We added this new component that simplifies the intersection of states and ripples.

You can set the state of the ripple like so:

    statefulRippleView.isRippleHighlighted = true
...
    statefulRippleView.isSelected = true

API changes

BottomNavigation

MDCBottomNavigationBar

new property: backgroundBlurEffectStyle in MDCBottomNavigationBar

new property: backgroundBlurEnabled in MDCBottomNavigationBar

new property: truncatesLongTitles in MDCBottomNavigationBar

removed property: itemsContentInsets in MDCBottomNavigationBar

Ripple

MDCRippleState

new enum: MDCRippleState

new enum value: MDCRippleStateSelected in MDCRippleState

new enum value: MDCRippleStateDragged in MDCRippleState

new enum value: MDCRippleStateHighlighted in MDCRippleState

new enum value: MDCRippleStateNormal in MDCRippleState

new typedef: MDCRippleState

MDCStatefulRippleView

new class: MDCStatefulRippleView

new method: -rippleColorForState: in MDCStatefulRippleView

new property: selected in MDCStatefulRippleView

new property: allowsSelection in MDCStatefulRippleView

new property: rippleHighlighted in MDCStatefulRippleView

new method: -setRippleColor:forState: in MDCStatefulRippleView

new property: dragged in MDCStatefulRippleView

Component changes

Changes

BottomNavigation

Dialogs

Ripple

Multi-component changes


76.1.2

Fix build tooling.


76.1.1

Fix Cocoapods validation failures.


76.1.0

Add additional snapshot tests and mark outdated theming API as deprecated.

New deprecations

The previous theming API is being deprecated in favor of MDCContainerScheme. Bottom Navigation's itemsContentInsets in is being deprecated as it is no longer used internally.

Changes

AppBar

BottomAppBar

BottomNavigation

Dialogs

Multi-component changes


76.0.0

This major release changes the Material Theming colors for Cards cells. It also includes bug fixes for Navigation Drawer and Text Fields.

Breaking changes

The MDCCardsColorThemer now sets the imageTintColor:forState: on MDCCardCollectionCell. This property was previously unset by the themer.

API changes

Collections

MDCCollectionViewEditing

new property: minimumPressDuration in MDCCollectionViewEditing

Changes

ActionSheet

BottomNavigation

Buttons

Cards

Collections

Dialogs

NavigationDrawer

Ripple

TextFields

Multi-component changes


75.0.1

This patch release reformats the entire code base to align to the latest Google Objective-C Style enforced by clang-format.

Multi-component changes


75.0.0

This major release includes a change to the behavior of MDCButton‘s borderWidthForState: API and the behavior of MDCSnackbarManager’s shouldEnableAccessibilityViewIsModal property. Improved support for the bazel build system is introduced for several components.

Breaking changes

MDCButton‘s borderWidthForState: behavior now matches that of UIButton’s forState: properties. Any state without an explicitly-set value will fall-back to the value for the UIControlStateNormal state. This does not change the appearance of MDCButton, but does change the values returned by the API.

New features

MDCSnackbarManager‘s shouldEnableAccessibilityViewIsModal was previously used to determine the value of a snackbar view’s accessibilityViewIsModal property. Clients can now use the MDCSnackbarManagerDelegate API -willPresentSnackbarWithMessageView: to override the view's accessibilityViewIsModal for each Snackbar. This value is propagated to the scrim view to ensure that modality is correctly configured for Snackbars.

@implementation MySnackbarManagerDelegate

- (void)willPresentSnackbarWithMessageView:(MDCSnackbarMessageView *)messageView {
  // All Snackbars with an action are "modal" for UIAccessibility
  if (messageView.actionButtons.count > 0) {
    messageView.accessibilityViewIsModal = YES;
  }
}

@end

Changes

ActivityIndicator

AppBar

BottomAppBar

Buttons

Cards

Collections

Dialogs

FeatureHighlight

FlexibleHeader

List

MaskedTransition

NavigationBar

NavigationDrawer

PageControl

Slider

Snackbar

Tabs

TextFields

Typography

private/Beta

schemes/Shape

Multi-component changes


74.0.0

This major release introduces Material Theming extensions for MDCDialogPresentationController and a change to the behavior of MDCButton's backgroundColorForState: API. Improved support for the bazel build system is introduced for several components.

Breaking changes

MDCButton‘s backgroundColorForState: behavior now matches that of UIButton’s forState: properties. Any state without an explicitly-set value will fall-back to the value for the UIControlStateNormal state. This does not change the appearance of MDCButton, but does change the values returned by the API.

New features

Material Theming for MDCDialogPresentationController

MDCDialogPresentationController can now be themed using the Theming extension provided by MaterialDialogs+Theming.h.

MDCAlertController *materialAlertController =
    [MDCAlertController alertControllerWithTitle:@"Title" message:@"Message"];
MDCDialogPresentationController *presentationController =
    materialAlertController.mdc_dialogPresentationController;

MDCContainerScheme *containerScheme = [[MDCContainerScheme alloc] init];
[presentationController applyThemeWithScheme:self.containerScheme];

Replace this text with example code for each new feature.

Changes

ActivityIndicator

AnimationTiming

BottomNavigation

BottomSheet

ButtonBar

Buttons

Cards

Chips

CollectionCells

Dialogs

Ink

Palettes

ProgressView

Ripple

ShadowElevations

ShadowLayer

TextFields

private/Math

private/Snapshot/TestHost

private/Snapshot

schemes/Typography

Multi-component changes


73.1.1

In this patch release we have improved the formatting of our codebase, and added missing imports to the Dragons target.

API changes

Component changes

Dragons App

Multi-component changes


73.1.0

In this minor release we have added new theming extensions for Cards and Chips, as well as added a new component to beta called Ripple that will eventually be a successor to Ink. We also added additional functionality to Dialogs, NavigationBar, and snapshot testing for Textfields.

New features

Card Theming Extension Usage Example

  var scheme: MDCContainerScheming {
    let scheme = MDCContainerScheme()
    scheme.colorScheme = colorScheme
    scheme.typographyScheme = typographyScheme
    scheme.shapeScheme = shapeScheme
    return scheme
  }
  ...
  let card = MDCCard()
  card.applyTheme(withScheme: scheme)

Chips Theming Extension Usage Example

  var scheme: MDCContainerScheming {
    let scheme = MDCContainerScheme()
    scheme.colorScheme = colorScheme
    scheme.typographyScheme = typographyScheme
    scheme.shapeScheme = shapeScheme
    return scheme
  }
  ...
  let chipView = MDCChipView()
  chipView.applyTheme(withScheme: scheme)

Dialogs Background Color Usage Example

let alert = MDCAlertController(title: "Title", message: "Message")
alert.backgroundColor = .white

NavigationBar Title View Inset Usage Example

let navigationBar = MDCNavigationBar()
navigationBar.titleInsets = UIEdgeInsets(top: 0, left: 16, bottom: 0, right: 16)

API changes

Cards+Theming

New extension.

Chips+Theming

New extension.

Ripple

New component.

Component changes

Changes

ActionSheet

ActivityIndicator

AppBar

BottomAppBar

BottomNavigation

BottomSheet

Cards

Chips

Collections

Dialogs

FlexibleHeader

NavigationBar

NavigationDrawer

Ripple

Slider

Tabs

TextFields

Multi-component changes


73.0.0

This is a major release that introduces copy semantics in MDCShapeCategory, part of the Shapes scheme. Also in this release is a new API in NavigationDrawer that provides a way to expand the bottom drawer to full height.

New features

NavigationDrawer expansion

The NavigationDrawer component's MDCBottomDrawerViewController has a new API that allows clients to programmatically expand the bottom drawer to the full height of the presenting view.

Example (Swift)

drawerVC.expandToFullscreen(withDuration: 0.2, completion: { finished in
  if finished {
    print("expansion complete");
  } else {
    print("expansion cancelled");
  }
})

API changes

ActionSheet+Theming

New extension.

NavigationDrawer

MDCBottomDrawerViewController

new method: -expandToFullscreenWithDuration:completion: in MDCBottomDrawerViewController

MDCBottomDrawerPresentationController

new method: -expandToFullscreenWithDuration:completion: in MDCBottomDrawerPresentationController

ShapeScheme

MDCShapeCategory

modified property: bottomLeftCorner in MDCShapeCategory

Type of change:Declaration
From:@property(strong, nonatomic) MDCCornerTreatment *bottomLeftCorner
To:@property(nonatomic, copy) MDCCornerTreatment *bottomLeftCorner

modified class: MDCShapeCategory

Type of change:Swift declaration
From:class MDCShapeCategory : NSObject
To:class MDCShapeCategory : NSObject, NSCopying

modified class: MDCShapeCategory

Type of change:Declaration
From:@interface MDCShapeCategory : NSObject
To:@interface MDCShapeCategory : NSObject <NSCopying>

modified property: bottomRightCorner in MDCShapeCategory

Type of change:Declaration
From:@property(strong, nonatomic) MDCCornerTreatment *bottomRightCorner
To:@property(nonatomic, copy) MDCCornerTreatment *bottomRightCorner

modified property: topLeftCorner in MDCShapeCategory

Type of change:Declaration
From:@property(strong, nonatomic) MDCCornerTreatment *topLeftCorner
To:@property(nonatomic, copy) MDCCornerTreatment *topLeftCorner

modified property: topRightCorner in MDCShapeCategory

Type of change:Declaration
From:@property(strong, nonatomic) MDCCornerTreatment *topRightCorner
To:@property(nonatomic, copy) MDCCornerTreatment *topRightCorner

Component changes

Changes

ActionSheet

BottomNavigation

BottomSheet

FlexibleHeader

NavigationDrawer

TextFields

schemes/Shape

Multi-component changes


72.2.0

In this minor release we added scrimColor support for MDCBottomSheetController and added a theming extension support for MDCAlertController. We also added TextFields snapshot testing along with various bug fixes.

New features

Bottom Sheet scrimColor API usage example

  MDCBottomSheetController *bottomSheet =
      [[MDCBottomSheetController alloc] initWithContentViewController:viewController];
  bottomSheet.scrimColor = UIColor.blueColor;
  [self presentViewController:bottomSheet animated:YES completion:nil];

Dialogs Theming Extension usage example

  var scheme: MDCContainerScheming {
    let scheme = MDCContainerScheme()
    scheme.colorScheme = colorScheme
    scheme.typographyScheme = typographyScheme
    return scheme
  }
  ...
  let alertController = MDCAlertController(title: "Title", message: "Message")
  alertController.applyTheme(withScheme: scheme)

Bug fixes

{Git-LFS} Exclude git-lfs from stable #5977

API changes

Component changes

Changes

ActionSheet

BottomSheet

Buttons

Chips

Dialogs

FlexibleHeader

NavigationDrawer

private/KeyboardWatcher

Textfields

Multi-component changes


72.1.0

This minor release fixes a ChipField RTL issue.

Component Changes

Chips


72.0.1

Corrected readme version to match cocopods version.

71.0.0

In this release we fixed some NavigationDrawer/BottomDrawer bugs and started using the theming extensions. This includes using categories on the components and a global container scheme.

Breaking changes

  • MDCColorScheming has added the copy attribute to its properties.
  • MDCTypographyScheming has added the copy attribute to its properties.
  • MDCFloatingButtonThemer changes its mapping to use a title color #5912

New features

Button theming

    textButton.applyTextTheme(withScheme: MDCContainerScheme())

ButtonBar theming

  var scheme: MDCContainerScheming {
    let scheme = MDCContainerScheme()
    scheme.colorScheme = colorScheme
    scheme.typographyScheme = typographyScheme
    return scheme
  }
  ...
  buttonBar.applyPrimaryTheme(withScheme: scheme)

Dialogs usage example

  NSString *titleString = @"Reset Settings?";
  NSString *messageString = @"This will reset your device to its default factory settings.";

  MDCAlertController *alert = [MDCAlertController alertControllerWithTitle:titleString
                                                                   message:messageString];
  alert.mdc_adjustsFontForContentSizeCategory = YES;

  MDCActionHandler handler = ^(MDCAlertAction *action) {
    NSLog(@"action pressed: %@", action.title);
  };

  MDCAlertAction *agreeAaction = [MDCAlertAction actionWithTitle:@"Cancel"
                                                        emphasis:MDCActionEmphasisLow
                                                         handler:handler];
  [alert addAction:agreeAaction];

  MDCAlertAction *disagreeAaction = [MDCAlertAction actionWithTitle:@"Accept"
                                                           emphasis:MDCActionEmphasisLow
                                                            handler:handler];
  [alert addAction:disagreeAaction];
  [MDCAlertControllerThemer applyScheme:self.alertScheme toAlertController:alert];

  [self presentViewController:alert animated:YES completion:NULL];

Component changes

Buttons

MDCFloatingButtonThemer changes its mapping to use a title color #5912

Banner

An MVP view with layout was added to examples.

Container scheme

We have created a global container scheme to hold all subsystems schemes. We have started to move our theming APIs into class extensions/catgories. These are the components that have landed some of these changes:

  • ButtonBar
  • Button

Changes

ActionSheet

ActivityIndicator

AnimationTiming

ButtonBar

Buttons

Cards

Dialogs

NavigationDrawer

Snackbar

schemes/Color

schemes/Typography

Multi-component changes


70.1.0

This minor release introduces a new Alpha ContainerScheme type and several bug fixes.

New features

A new ContainerScheme type has been introduced that can be used to represent the complete collection of Material Theming subsystem schemes. This new scheme type is an Alpha component at this point in time and is not yet intended for general use.

API changes

ContainerScheme

New component.

Component changes

Changes

ActionSheet

Cards

Dialogs

NavigationDrawer

schemes/Container


70.0.0

This major change removes all property coding behavior from our components. It also includes performance improvements for NavigationDrawer and a new API for adjusting its content offset. PageControl now also supports RTL.

Breaking changes

Component properties are no longer encoded or decoded for any component.

New features

Improvements made to Navigation Drawer:

  1. Improvements to the Navigation Drawer‘s performance by removing unneeded calls to the contentViewController’s preferredContentSize.
  2. A new API on MDCBottomDrawerViewController: setContentOffsetY:contentOffsetY:animated: allowing to manually scroll the content to the desired offset. Setting the contentOffsetY to 0 will scroll the drawer to the top of the content.

MDCPageControl has a new respectsUserInterfaceLayoutDirection property that, when enabled, causes the page control to react to RTL layout.

API changes

Buttons

MDCFloatingButton

removed method: -initWithCoder: in MDCFloatingButton

Collections

MDCCollectionViewEditing

new method: -updateReorderCellPosition in MDCCollectionViewEditing

NavigationDrawer

MDCBottomDrawerViewController

new method: -setContentOffsetY:animated: in MDCBottomDrawerViewController

MDCBottomDrawerPresentationController

new property: contentReachesFullscreen in MDCBottomDrawerPresentationController

new method: -setContentOffsetY:animated: in MDCBottomDrawerPresentationController

PageControl

MDCPageControl

new property: respectsUserInterfaceLayoutDirection in MDCPageControl

Slider

MDCSlider

modified class: MDCSlider

Type of change:Swift declaration
From:class MDCSlider : UIControl, NSSecureCoding
To:class MDCSlider : UIControl

modified class: MDCSlider

Type of change:Declaration
From:@interface MDCSlider : UIControl <NSSecureCoding>
To:@interface MDCSlider : UIControl

ColorScheme

MDCTonalPalette

removed method: -initWithCoder: in MDCTonalPalette

modified class: MDCTonalPalette

Type of change:Swift declaration
From:class MDCTonalPalette : NSObject, NSCopying, NSSecureCoding
To:class MDCTonalPalette : NSObject, NSCopying

modified class: MDCTonalPalette

Type of change:Declaration
From:@interface MDCTonalPalette : NSObject <NSCopying, NSSecureCoding>
To:@interface MDCTonalPalette : NSObject <NSCopying>

Component changes

Breaking changes

Buttons

Multi-component breaking changes

Changes

BottomNavigation

BottomSheet

Collections

Dialogs

NavigationDrawer

PageControl

Tabs

Multi-component changes


69.0.0

This major release introduces a breaking change with Snackbar's default style. It also includes a new top handle and performance improvements for NavigationDrawer.

Breaking changes

usesLegacySnackbar is now NO by default.

New features

MDCBottomNavigationBar has a new elevation property.

NavigationDrawer has the following changes:

  1. Added support for content in the drawer that is dynamically sized. Updating the preferredContentSize at any time will cause the drawer to respond appropriately.
  2. Added a top handle that sits at the top of the drawer to show scrollability. It disappears when the drawer goes to full screen or when there is no more to scroll.
  3. Added a way to customize the color of the top handle.
  4. The drawer's header height expands as it goes to full screen to cover the safe area and status bar. We now provide a delegate to allow clients to be aware of the relevant top content inset so they lay out their header content appropriately based on height changes.
  5. Implemented performance improvements by removing some calls to preferredContentSize of the contentViewController within the drawer implementation.

API changes

AppBar+ColorThemer

MDCAppBarColorThemer(ToBeDeprecated)

modified class method: +applySurfaceVariantWithColorScheme:toAppBar: in MDCAppBarColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toAppBar: in MDCAppBarColorThemer(ToBeDeprecated)

AppBar+TypographyThemer

MDCAppBarTypographyThemer(ToBeDeprecated)

modified class method: +applyTypographyScheme:toAppBar: in MDCAppBarTypographyThemer(ToBeDeprecated)

BottomNavigation

MDCBottomNavigationBar

new property: elevation in MDCBottomNavigationBar

NavigationDrawer

MDCBottomDrawerViewControllerDelegate

new protocol: MDCBottomDrawerViewControllerDelegate

new method: -bottomDrawerControllerDidChangeTopInset:topInset: in MDCBottomDrawerViewControllerDelegate

MDCBottomDrawerPresentationController

new property: topHandleHidden in MDCBottomDrawerPresentationController

new property: topHandleColor in MDCBottomDrawerPresentationController

MDCBottomDrawerViewController

new property: topHandleColor in MDCBottomDrawerViewController

new property: delegate in MDCBottomDrawerViewController

new property: topHandleHidden in MDCBottomDrawerViewController

Component changes

ActionSheet

AppBar

BottomNavigation

NavigationDrawer

Snackbar

Multi-component changes


68.2.0

In this minor release we have introduced an API for customizing the Navigation Drawer scrim color, an API for animating corner radius changes for MDCShadowLayer, an MDCSnackbarManager instance color themer, along with bug fixes and performance improvements.

New features

Navigation Drawer now supports customizing its scrim color as follows:

let bottomDrawerViewController = MDCBottomDrawerViewController()
// Set the drawer scrim color.
bottomDrawerViewController.scrimColor = UIColor.blue.withAlphaComponent(0.5)

bottomDrawerViewController.contentViewController = contentViewController
bottomDrawerViewController.headerViewController = headerViewController
MDCBottomDrawerColorThemer.applySemanticColorScheme(colorScheme,
                                                    toBottomDrawer: bottomDrawerViewController)
present(bottomDrawerViewController, animated: true, completion: nil)

MDCShadowLayer now supports animating corner radius changes:

@interface CustomView : UIView
@end

@implementation CustomView
+ (Class)layerClass {
  return [MDCShadowLayer class];
}

- (MDCShadowLayer *)shadowLayer {
  return (MDCShadowLayer *)self.layer;
}
 @end

CAMediaTimingFunction *timingFunction =
    [CAMediaTimingFunction mdc_functionWithType:MDCAnimationTimingFunctionEaseInOut];
[self.customView.shadowLayer animateCornerRadius:(CGFloat)25.0
                              withTimingFunction:timingFunction
                                        duration:(CGFloat)2.5];

MDCSnackbarManager instances can now be themed using a color scheme:

MDCSnackbarManager *snackbarManager = [[MDCSnackbarManager alloc] init];
MDCSemanticColorScheme *colorScheme = [[MDCSemanticColorScheme alloc] init];
[MDCSnackbarColorThemer applySemanticColorScheme:colorScheme toSnackbarManager:snackbarManager];

API changes

NavigationDrawer

MDCBottomDrawerViewController

new property: scrimColor in MDCBottomDrawerViewController

MDCBottomDrawerPresentationController

new property: scrimColor in MDCBottomDrawerPresentationController

ShadowLayer

MDCShadowLayer

new method: -animateCornerRadius:withTimingFunction:duration: in MDCShadowLayer

Snackbar+ColorThemer

MDCSnackbarColorThemer

new class method: +applySemanticColorScheme:toSnackbarManager: in MDCSnackbarColorThemer

Component changes

AnimationTiming

BottomAppBar

BottomNavigation

FlexibleHeader

NavigationDrawer

ShadowElevations

ShadowLayer

Snackbar

Typography


68.1.0

In this minor release we have added a top corners API and a state system for Navigation Drawer along with bug fixes and additional examples.

New features

By using Navigation Drawer's MDCBottomDrawerViewController, you can now set the top corners radius of your drawer for each of its different presentation states MDCBottomDrawerState.

let bottomDrawerViewController = MDCBottomDrawerViewController()
// Set the drawer top corners for the drawer states.
bottomDrawerViewController.setTopCornersRadius(24, for: .collapsed)
bottomDrawerViewController.setTopCornersRadius(8, for: .expanded)

bottomDrawerViewController.contentViewController = contentViewController
bottomDrawerViewController.headerViewController = headerViewController
MDCBottomDrawerColorThemer.applySemanticColorScheme(colorScheme,
                                                    toBottomDrawer: bottomDrawerViewController)
present(bottomDrawerViewController, animated: true, completion: nil)

API changes

NavigationDrawer

MDCBottomDrawerViewController

new method: -topCornersRadiusForDrawerState: in MDCBottomDrawerViewController

new method: -setTopCornersRadius:forDrawerState: in MDCBottomDrawerViewController

new property: drawerState in MDCBottomDrawerViewController

modified class: MDCBottomDrawerViewController

Type of change:Swift declaration
From:class MDCBottomDrawerViewController : UIViewController
To:class MDCBottomDrawerViewController : UIViewController, MDCBottomDrawerPresentationControllerDelegate

modified class: MDCBottomDrawerViewController

Type of change:Declaration
From:@interface MDCBottomDrawerViewController : UIViewController
To:@interface MDCBottomDrawerViewController : UIViewController <MDCBottomDrawerPresentationControllerDelegate>

MDCBottomDrawerState

new enum: MDCBottomDrawerState

new enum value: MDCBottomDrawerStateExpanded in MDCBottomDrawerState

new enum value: MDCBottomDrawerStateCollapsed in MDCBottomDrawerState

new typedef: MDCBottomDrawerState

new enum value: MDCBottomDrawerStateFullScreen in MDCBottomDrawerState

MDCBottomDrawerPresentationController

new property: delegate in MDCBottomDrawerPresentationController

MDCBottomDrawerPresentationControllerDelegate

new method: -bottomDrawerWillChangeState:drawerState: in MDCBottomDrawerPresentationControllerDelegate

new method: -bottomDrawerTopTransitionRatio:transitionRatio: in MDCBottomDrawerPresentationControllerDelegate

new protocol: MDCBottomDrawerPresentationControllerDelegate

Component changes

ActionSheet

AppBar

List

NavigationDrawer

Snackbar

schemes/Color

schemes/Typography


68.0.0

This major release includes a breaking change in behavior for Bottom Sheet's shapes themer, a variety of bug fixes, a new color themer for NavigationDrawer, and documentation for the Shape theming system.

Breaking changes

Bottom Sheet's shape themer behavior has changed:

Bottom Sheet now maps the top 2 corners to the Large Component Shape category when the sheet isn't in a full screen state. When the sheet is in full screen, we do not map it or shape it at all.

New features

NavigationDrawer now has a color themer.

Sliders now respect exclusive touches.

API changes

NavigationDrawer+ColorThemer

New extension.

Component changes

AppBar

BottomSheet

Buttons

Cards

Chips

Collections

Dialogs

List

NavigationDrawer

Slider

schemes/Shape


67.2.0

This minor release introduces new functionality for theming individual buttons of an MDCAlertController.

New features

It is now possible to theme MDCAlertController buttons individually using the new emphasis property on MDCAlertAction in conjunction with the MDCAlertControllerThemer.

let alert = MDCAlertController(title: "Button Theming", message: "High, Medium & Low Emphasis")

alert.addAction(MDCAlertAction(title:"High", emphasis: .high, handler: <#handler#>))
alert.addAction(MDCAlertAction(title:"Medium", emphasis: .medium, handler: <#handler#>))
alert.addAction(MDCAlertAction(title:"Low", emphasis: .low, handler: <#handler#>))

MDCAlertControllerThemer.applyScheme(<#alertScheme#>, to: alert)

self.present(alert, animated: true, completion: nil)

API changes

Dialogs+DialogThemer

MDCAlertScheming

new property: buttonScheme in MDCAlertScheming

MDCAlertScheme

new property: buttonScheme in MDCAlertScheme

Dialogs

MDCAlertController

modified property: elevation in MDCAlertController

Type of change:Swift declaration
From:var elevation: CGFloat { get set }
To:var elevation: Int32 { get set }

modified property: elevation in MDCAlertController

Type of change:Declaration
From:@property (assign, readwrite, nonatomic) CGFloat elevation;
To:@property (assign, readwrite, nonatomic) int elevation;

MDCActionEmphasis

new enum: MDCActionEmphasis

new enum value: MDCActionEmphasisLow in MDCActionEmphasis

new enum value: MDCActionEmphasisMedium in MDCActionEmphasis

new enum value: MDCActionEmphasisHigh in MDCActionEmphasis

MDCDialogPresentationController

modified property: dialogElevation in MDCDialogPresentationController

Type of change:Swift declaration
From:var dialogElevation: CGFloat { get set }
To:var dialogElevation: Int32 { get set }

modified property: dialogElevation in MDCDialogPresentationController

Type of change:Declaration
From:@property (assign, readwrite, nonatomic) CGFloat dialogElevation;
To:@property (assign, readwrite, nonatomic) int dialogElevation;

MDCAlertAction

new property: emphasis in MDCAlertAction

new class method: +actionWithTitle:emphasis:handler: in MDCAlertAction

Component changes

Dialogs


67.1.0

In this minor release we provide a shadow opacity reset toggle for Flexible Header, VoiceOver and rounded corners support for the Navigation Drawer, along with bug fixes and unit tests improvements.

New features

Flexible Header

  • Flexible Header supports resetting the visible shadow opacity to 0 when setting trackingScrollView to nil by setting the BOOL property resetShadowAfterTrackingScrollViewIsReset.

Navigation Drawer

  • When VoiceOver or Switch Control is turned on in your app, Navigation Drawer will always show up in full screen.

  • Navigation Drawer has rounded corners when there is more scrollable content to scroll in the drawer.

Component changes

ActionSheet

ActivityIndicator

AppBar

BottomAppBar

BottomSheet

Buttons

Cards

Chips

CollectionCells

CollectionLayoutAttributes

Dialogs

FeatureHighlight

FlexibleHeader

List

MaskedTransition

NavigationBar

NavigationDrawer

ProgressView

ShadowLayer

Snackbar

Tabs

TextFields


67.0.0

There are some rendering changes that have lead to classifying this as a major release. There are no major API changes.

We've added some new theming capabilities for Action Sheets and Lists.

API changes

ActionSheet+ActionSheetThemer

New extension.

List+ColorThemer

New extension.

List+ListThemer

New extension.

Component changes

ActionSheet

AppBar

BottomAppBar

BottomNavigation

ButtonBar

Buttons

Chips

Dialogs

List

NavigationDrawer

TextFields


66.0.0

Shapes updated it's interface. ActionSheet improvements. List added a typography themer.

Breaking changes

Shapes updated its API. See #5247 for details.

API changes

List+TypographyThemer

New extension.

Component changes

ActionSheet

BottomNavigation

BottomSheet

Buttons

Cards

Chips

Dialogs

FlexibleHeader

List

NavigationDrawer

Tabs

TextFields

schemes/Shape


65.0.0

Bottom App Bar got a floatingButtonVerticalOffset property. ActionSheets continued work. (still in alpha). AlertController in dialogs: Incremental improvements to bring it up to the design guidelines and so that a themer can style it. Snackbar API for accessibility. MDCAppBarTextColorAccessibilityMutator a deprecated class got deleted.

Breaking changes

MDCAppBarTextColorAccessibilityMutator a deprecated class got deleted.

New features

ActionSheet

Action sheet got the color and typography themers.

let actionSheet = MDCActionSheetController()
MDCActionSheetColorThemer.applySemanticColorScheme(colorScheme, to: actionSheet)
MDCActionSheetTypographyThemer.applyTypographyScheme(typographyScheme, to: actionSheet)

BottomAppBar

Bottom App Bar got a new property to offset the floating button.

bottomAppBar.floatingButtonVerticalOffset = 5.0f;

AlertController

AlertController got a themer

 MDCAlertScheme *alertScheme = [[MDCAlertScheme alloc] init];
alertScheme.colorScheme = self.colorScheme;
alertScheme.typographyScheme = self.typographyScheme;
[MDCAlertControllerThemer applyScheme:alertScheme toAlertController:alertController];

Snackbar

To make Snackbars with action require a user action set the this property to YES.

manager.shouldEnableAccessibilityViewIsModal = YES;

API changes

ActionSheet+ColorThemer

New extension.

ActionSheet

MDCActionSheetController

new property: messageTextColor in MDCActionSheetController

new property: titleTextColor in MDCActionSheetController

new property: inkColor in MDCActionSheetController

new property: actionTintColor in MDCActionSheetController

new property: imageRenderingMode in MDCActionSheetController

new property: actionTextColor in MDCActionSheetController

BottomAppBar

MDCBottomAppBarView

new property: floatingButtonVerticalOffset in MDCBottomAppBarView

Dialogs

MDCAlertController

new property: titleAlignment in MDCAlertController

MDCAlertControllerView

new property: titleAlignment in MDCAlertControllerView

Snackbar

MDCSnackbarManager

new property: shouldEnableAccessibilityViewIsModal in MDCSnackbarManager

Component changes

ActionSheet

AppBar

BottomAppBar

Dialogs

FlexibleHeader

NavigationDrawer

ShadowLayer

Snackbar

TextFields


64.0.0

In this release AlertControllers added a cornerRadius property to specify its shape. FlexibleHeader added disableContentInsetAdjustmentWhenContentInsetAdjustmentBehaviorIsNever to let clients choose if the scrollview can adjust the contentInsets. ChipField added showChipsDeleteButton to turn on the delete button on chips. BottonSheet added preferredSheetHeight to let clients define a non half screen height. Shape Subsystem integrated into many components including Button Cards and Chips.

Breaking changes

Card Buttons and Chips all are using the shape subsystem, which subtly changed the way their corner radii are rendered.

New features

AlertControllers added a cornerRadius

A property to specify its shape.

MDCAlertController *alert = [MDCAlertController alertControllerWithTitle:@"title"
                                                               message:@"message"];
[alert addAction:[MDCAlertAction actionWithTitle:@"action1" handler:nil]];
alert.cornerRadius = cornerRadius;

FlexibleHeader added disableContentInsetAdjustmentWhenContentInsetAdjustmentBehaviorIsNever

To make it easier to support scrollviews and content insets

_scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
if (@available(iOS 11.0, *)) {
_scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}

ChipField added showChipsDeleteButton

Turns on the delete button on chips.

var chipField = MDCChipField()
chipField.frame = .zero
chipField.delegate = self
chipField.textField.placeholderLabel.text = "This is a chip field."
chipField.showChipsDeleteButton = true

BottonSheet added preferredSheetHeight to let clients define a non half screen height.

presentationController = [[MDCBottomSheetPresentationController alloc]
      initWithPresentedViewController:stubPresentedViewController
             presentingViewController:stubPresentingViewController];
presentationController.preferredSheetHeight = 100;

API changes

BottomSheet

MDCBottomSheetTransitionController

new property: preferredSheetHeight in MDCBottomSheetTransitionController

MDCBottomSheetPresentationController

new property: preferredSheetHeight in MDCBottomSheetPresentationController

Buttons+ButtonThemer

MDCButtonScheming

new property: shapeScheme in MDCButtonScheming

MDCButtonScheme

new property: shapeScheme in MDCButtonScheme

Buttons+ShapeThemer

New component.

Chips+ChipThemer

MDCChipViewScheming

new property: shapeScheme in MDCChipViewScheming

MDCChipViewScheme

new property: shapeScheme in MDCChipViewScheme

Chips

MDCChipField

new property: showChipsDeleteButton in MDCChipField

Chips+ShapeThemer

New component.

Dialogs+DialogThemer

New component.

Dialogs

MDCAlertController

new property: cornerRadius in MDCAlertController

MDCAlertControllerView

new property: cornerRadius in MDCAlertControllerView

FlexibleHeader

MDCFlexibleHeaderView

new property: disableContentInsetAdjustmentWhenContentInsetAdjustmentBehaviorIsNever in MDCFlexibleHeaderView

Component changes

ActionSheet

AppBar

BottomSheet

Buttons

Breaking changes

Cards

Chips

Breaking changes

Dialogs

FlexibleHeader

PageControl

Tabs

TextFields

schemes/Shape


63.0.0

This major release adds additional support for shape theming to BottomSheet and Cards and improvements to ActionSheets, BottomAppBar, BottomNavigation, Dialogs, NavigationBar, and TextFields.

Breaking changes

Cards

This is a breaking change due to the addition of the shapeScheme property to the MDCCardScheming protocol. If you have created a type that conforms to MDCCardScheming you will need to implement the shapeScheme property now as well.

New features

  1. ActionSheet's backgroundColor can now be customized.
  2. BottomAppBar has a new surface variant color themer API. Documentation
  3. BottomNavigation now allows you to fetch a view for a given item using the new viewForItem: API.
  4. BottomSheet and Cards each now have a Shape themer.
  5. NavigationBar now allows you to set a different tint color for the leading and trailing items.

API changes

ActionSheet

MDCActionSheetController

modified property: backgroundColor in MDCActionSheetController

Type of change:Declaration
From:@property(nonatomic, nonnull, strong) UIColor *backgroundColor
To:@property (readwrite, strong, nonatomic, nonnull) UIColor *backgroundColor;

BottomAppBar+ColorThemer

MDCBottomAppBarColorThemer

new class method: +applySurfaceVariantWithSemanticColorScheme:toBottomAppBarView: in MDCBottomAppBarColorThemer

BottomAppBar

MDCBottomAppBarView

new property: trailingBarItemsTintColor in MDCBottomAppBarView

new property: leadingBarItemsTintColor in MDCBottomAppBarView

BottomNavigation

MDCBottomNavigationBar

new method: -viewForItem: in MDCBottomNavigationBar

BottomSheet+ShapeThemer

New extension.

Cards+CardThemer

MDCCardScheme

new property: shapeScheme in MDCCardScheme

MDCCardScheming

new property: shapeScheme in MDCCardScheming

Cards+ShapeThemer

New extension.

NavigationBar

MDCNavigationBar

new property: leadingBarItemsTintColor in MDCNavigationBar

new property: trailingBarItemsTintColor in MDCNavigationBar

ShapeScheme

New component.

Component changes

ActionSheet

BottomAppBar

BottomNavigation

BottomSheet

Cards

Dialogs

FlexibleHeader

HeaderStackView

Ink

List

MaskedTransition

NavigationBar

NavigationDrawer

TextFields

schemes/Shape


62.2.0

This hotfix minor release rolls back a behavioral change in Dialogs that was introduced in v60.0.0.

Component changes

Dialogs


62.1.0

This minor release introduces a new auto-sizing List cell implementation, improvements to ActionSheet, the ability to modify casing behavior on NavigationBar, and bug fixes.

New features

You can now set an accessibilityIdentifier on ActionSheet actions:

let action = MDCActionSheetAction(title: "Title", image: nil, handler: nil)
action.accessibilityIdentifier = "Some identifier"
actionSheet.addAction(action)

ActionSheet now has a typography themer.

ButtonBar now provides a mechanism for reacting to size changes of its buttons via its delegate.

There is a new self-sizing collection view cell.

NavigationBar exposes a new uppercasesButtonTitles property that can be used to change the auto-uppercasing behavior of the buttons. By default this property is enabled.

API changes

ActionSheet

MDCActionSheetAction

new property: accessibilityIdentifier in MDCActionSheetAction

modified class: MDCActionSheetAction

Type of change:Swift declaration
From:class MDCActionSheetAction : NSObject, NSCopying
To:class MDCActionSheetAction : NSObject, NSCopying, UIAccessibilityIdentification

modified class: MDCActionSheetAction

Type of change:Declaration
From:@interface MDCActionSheetAction : NSObject <NSCopying>
To:@interface MDCActionSheetAction : NSObject <NSCopying, UIAccessibilityIdentification>

MDCActionSheetController

new property: transitionController in MDCActionSheetController

ActionSheet+TypographyThemer

New component.

ButtonBar

MDCButtonBarDelegate

new method: -buttonBarDidInvalidateIntrinsicContentSize: in MDCButtonBarDelegate

MDCButtonBar

new property: uppercasesButtonTitles in MDCButtonBar

new property: delegate in MDCButtonBar

FlexibleHeader+CanAlwaysExpandToMaximumHeight

New component.

General changes

Component changes

ActionSheet

BottomAppBar

BottomNavigation

ButtonBar

FlexibleHeader

List

NavigationBar

ProgressView

ShadowElevations

Tabs

TextFields


62.0.0

This major release reverts the addition of the new canAlwaysExpandToMaximumHeight behavior for the FlexibleHeader introduced in v61.0.0. More details on the commit that was reverted: https://github.com/material-components/material-components-ios/commit/2b3722f7b8cc7df131a8b33695990c99931c0e1b

FlexibleHeader

Changes


61.0.0

In this breaking release we drop support for Xcode 8 and landed two new components in an Alpha state (not ready for clients to use yet).

Breaking changes

No longer support Xcode 8.

New deprecations

  • -buttonBar:viewForItem:layoutHints: in MDCButtonBarDelegate

New features

More accessibility APIs

new property: accessibilityIdentifier in MDCAlertAction new property: accessibilityHint in MDCSnackbarMessageView new property: accessibilityLabel in MDCSnackbarMessageView new property: accessibilityHint in MDCSnackbarMessage

Alpha components

  • ActionSheets

ActionSheets present a list of actions from the bottom of the screen.

  • NavigationDrawer

NavigationDrawer provides a container that presents from the bottom of the screen and also responds to drag gestures to flick to full screen, half screen or off screen.

API changes

ActionSheet

New component.

ButtonBar

MDCButtonBarDelegate

modified method: -buttonBar:viewForItem:layoutHints: in MDCButtonBarDelegate

Type of change:Deprecation message
From:``
To:There will be no replacement for this API.

modified method: -buttonBar:viewForItem:layoutHints: in MDCButtonBarDelegate

Type of change:Swift declaration
From:func buttonBar(_ buttonBar: MDCButtonBar, viewForItem barButtonItem: Any!, layoutHints: Any!) -> Any!
To:optional func buttonBar(_ buttonBar: MDCButtonBar, viewForItem barButtonItem: Any!, layoutHints: Any!) -> Any!

Dialogs

MDCAlertAction

new property: accessibilityIdentifier in MDCAlertAction

modified class: MDCAlertAction

Type of change:Declaration
From:@interface MDCAlertAction : NSObject <NSCopying>
To:@interface MDCAlertAction : NSObject <NSCopying, UIAccessibilityIdentification>

FlexibleHeader+CanAlwaysExpandToMaximumHeight

New component.

NavigationBar

MDCNavigationBar

modified property: titleTextAttributes in MDCNavigationBar

Type of change:Declaration
From:@property(nonatomic, copy, nullable) NSDictionary<NSAttributedStringKey, id> *titleTextAttributes
To:@property (readwrite, copy, nonatomic, nullable) NSDictionary<NSAttributedStringKey, id> *titleTextAttributes;

NavigationDrawer

New component.

Snackbar

MDCSnackbarMessageView

new property: accessibilityHint in MDCSnackbarMessageView

new property: accessibilityLabel in MDCSnackbarMessageView

MDCSnackbarMessage

new property: accessibilityHint in MDCSnackbarMessage

MDCSnackbarMessageView()

new category: MDCSnackbarMessageView()

removed category: MDCSnackbarMessageView()

modified property: snackbarMessageViewTextColor in MDCSnackbarMessageView()

Type of change:parent.usr
From:c:objc(ext)[email protected]@3125
To:c:objc(ext)[email protected]@3411

Component changes

Tabs

Changes

AppBar

Changes

Ink

Changes

ActionSheet

Changes

CollectionCells

Changes

Buttons

Changes

ButtonBar

Changes

TextFields

Changes

Chips

Changes

Snackbar

Changes

NavigationDrawer

Changes

BottomAppBar

Changes

Slider

Changes

NavigationBar

Changes

LibraryInfo

Changes

ShadowLayer

Changes

List

Changes

ActivityIndicator

Changes

BottomSheet

Changes

Typography

Changes

Dialogs

Changes

BottomNavigation

Changes

PageControl

Changes

AnimationTiming

Changes

Collections

Changes

FlexibleHeader

Changes


60.3.0

This minor release introduces a new behavioral flag for changing the title font size on MDCNavigationBar.

New features

MDCNavigationBar has a new flag that, once enabled, allows you to set a font with any size.

MDCNavigationBar *navigationBar = [[MDCNavigationBar alloc] init];
navigationBar.allowAnyTitleFontSize = YES;
UIFont *font = [UIFont systemFontOfSize:24];
navigationBar.titleFont = font; // Font size will actually be 24

API changes

NavigationBar

MDCNavigationBar

new property: allowAnyTitleFontSize in MDCNavigationBar

Component changes

NavigationBar

Changes


60.2.0

In this minor release we updated examples imports, added an API to set the ink color of buttons and started the deprecation of some AppBar APIs.

New deprecations

  • Deprecated MDCAppBarTextColorAccessibilityMutator.

Will be deprecated

FlexibleHeader

New features

  • AlertController got a new buttonInkColor property so you can specify the color of the ink.
  MDCAlertController *alert = [MDCAlertController alertControllerWithTitle:@"title"
                                                                   message:@"message"];
  alert.buttonInkColor = testColor;

API changes

AppBar

MDCAppBarTextColorAccessibilityMutator

deprecated class: MDCAppBarTextColorAccessibilityMutator

deprecated method: -mutate: in MDCAppBarTextColorAccessibilityMutator

Dialogs

MDCAlertController

new property: buttonInkColor in MDCAlertController

MDCAlertControllerView

new property: buttonInkColor in MDCAlertControllerView

FlexibleHeader

MDCFlexibleHeaderView()

moved category: MDCFlexibleHeaderView()

modified property: contentView in MDCFlexibleHeaderView()

Component changes

MaskedTransition

Changes

FeatureHighlight

Changes

AppBar

Changes

Buttons

Changes

TextFields

Changes

Chips

Changes

Cards

Changes

BottomAppBar

Changes

ShadowLayer

Changes

List

Changes

ActivityIndicator

Changes

BottomSheet

Changes

Dialogs

Changes

BottomNavigation

Changes

AnimationTiming

Changes

HeaderStackView

Changes

FlexibleHeader

Changes

ProgressView

Changes


60.1.0

Component changes

Tabs

Changes

MaskedTransition

Changes

schemes/Color

Changes

FeatureHighlight

Changes

AppBar

Changes

Buttons

Changes

ButtonBar

Changes

TextFields

Changes

Snackbar

Changes

NavigationBar

Changes

ActivityIndicator

Changes

Dialogs

Changes

BottomNavigation

Changes

PageControl

Changes

AnimationTiming

Changes

HeaderStackView

Changes

FlexibleHeader

Changes

ShadowElevations

Changes

Palettes

Changes


60.0.0

This major release introduces a breaking change for Swift libraries using FlexibleHeader. This change also introduces a migration guide for color schemes along, changes to the Snackbar's singleton pattern, and updated button theming in Dialogs.

Breaking changes

FlexibleHeader

This breaking change only affects Swift code and requires the following changes.

// Before
.preferredStatusBarStyle()

// After
.preferredStatusBarStyle

New features

FlexibleHeader has a new inferPreferredStatusBarStyle API that allows you to set an explicity preferredStatusBarStyle on the MDCFlexibleHeaderViewController.

An example of setting an explicit preferredStatusBarStyle:

flexibleHeaderViewController.inferPreferredStatusBarStyle = false
flexibleHeaderViewController.preferredStatusBarStyle = .lightContent

Upcoming deprecations

MDCColorScheme and MDCBasicColorScheme will both be deprecated on the following timeline:

  • October 10, 2018: Both APIs and any corresponding themer API will be deprecated.
  • November 10, 2018: Both APIs and any corresponding themer API will be deleted.

Learn more by reading the migration guide.

API changes

ActivityIndicator+ColorThemer

MDCActivityIndicatorColorThemer(ToBeDeprecated)

new category: MDCActivityIndicatorColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toActivityIndicator: in MDCActivityIndicatorColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCActivityIndicatorColorThemer
To:c:objc(cy)MDCActivityIndicatorColorThemer@ToBeDeprecated

AppBar+ColorThemer

MDCAppBarColorThemer(ToBeDeprecated)

new category: MDCAppBarColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toAppBar: in MDCAppBarColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCAppBarColorThemer
To:c:objc(cy)MDCAppBarColorThemer@ToBeDeprecated

BottomAppBar+ColorThemer

MDCBottomAppBarColorThemer(ToBeDeprecated)

new category: MDCBottomAppBarColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toBottomAppBarView: in MDCBottomAppBarColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCBottomAppBarColorThemer
To:c:objc(cy)MDCBottomAppBarColorThemer@ToBeDeprecated

BottomNavigation+ColorThemer

MDCBottomNavigationBarColorThemer(ToBeDeprecated)

new category: MDCBottomNavigationBarColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toBottomNavigationBar: in MDCBottomNavigationBarColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCBottomNavigationBarColorThemer
To:c:objc(cy)MDCBottomNavigationBarColorThemer@ToBeDeprecated

ButtonBar+ColorThemer

MDCButtonBarColorThemer(ToBeDeprecated)

new category: MDCButtonBarColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toButtonBar: in MDCButtonBarColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCButtonBarColorThemer
To:c:objc(cy)MDCButtonBarColorThemer@ToBeDeprecated

Buttons+ColorThemer

MDCButtonColorThemer(ToBeDeprecated)

new category: MDCButtonColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toRaisedButton: in MDCButtonColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCButtonColorThemer
To:c:objc(cy)MDCButtonColorThemer@ToBeDeprecated

modified class method: +applySemanticColorScheme:toFlatButton: in MDCButtonColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCButtonColorThemer
To:c:objc(cy)MDCButtonColorThemer@ToBeDeprecated

modified class method: +applyColorScheme:toButton: in MDCButtonColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCButtonColorThemer
To:c:objc(cy)MDCButtonColorThemer@ToBeDeprecated

modified class method: +applySemanticColorScheme:toButton: in MDCButtonColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCButtonColorThemer
To:c:objc(cy)MDCButtonColorThemer@ToBeDeprecated

modified class method: +applySemanticColorScheme:toFloatingButton: in MDCButtonColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCButtonColorThemer
To:c:objc(cy)MDCButtonColorThemer@ToBeDeprecated

Chips+ColorThemer

MDCChipViewColorThemer(ToBeDeprecated)

new category: MDCChipViewColorThemer(ToBeDeprecated)

modified class method: +applySemanticColorScheme:toStrokedChipView: in MDCChipViewColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCChipViewColorThemer
To:c:objc(cy)MDCChipViewColorThemer@ToBeDeprecated

Dialogs+ColorThemer

MDCAlertColorThemer(ToBeDeprecated)

new category: MDCAlertColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme: in MDCAlertColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCAlertColorThemer
To:c:objc(cy)MDCAlertColorThemer@ToBeDeprecated

FeatureHighlight+ColorThemer

MDCFeatureHighlightColorThemer(ToBeDeprecated)

new category: MDCFeatureHighlightColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toFeatureHighlightView: in MDCFeatureHighlightColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCFeatureHighlightColorThemer
To:c:objc(cy)MDCFeatureHighlightColorThemer@ToBeDeprecated

FlexibleHeader+ColorThemer

MDCFlexibleHeaderColorThemer(ToBeDeprecated)

new category: MDCFlexibleHeaderColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toFlexibleHeaderView: in MDCFlexibleHeaderColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCFlexibleHeaderColorThemer
To:c:objc(cy)MDCFlexibleHeaderColorThemer@ToBeDeprecated

modified class method: +applyColorScheme:toMDCFlexibleHeaderController: in MDCFlexibleHeaderColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCFlexibleHeaderColorThemer
To:c:objc(cy)MDCFlexibleHeaderColorThemer@ToBeDeprecated

FlexibleHeader

MDCFlexibleHeaderViewController

new property: preferredStatusBarStyle in MDCFlexibleHeaderViewController

new property: inferPreferredStatusBarStyle in MDCFlexibleHeaderViewController

removed method: -preferredStatusBarStyle in MDCFlexibleHeaderViewController

HeaderStackView+ColorThemer

MDCHeaderStackViewColorThemer(ToBeDeprecated)

new category: MDCHeaderStackViewColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toHeaderStackView: in MDCHeaderStackViewColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCHeaderStackViewColorThemer
To:c:objc(cy)MDCHeaderStackViewColorThemer@ToBeDeprecated

Ink+ColorThemer

MDCInkColorThemer(ToBeDeprecated)

new category: MDCInkColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toInkView: in MDCInkColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCInkColorThemer
To:c:objc(cy)MDCInkColorThemer@ToBeDeprecated

NavigationBar+ColorThemer

MDCNavigationBarColorThemer(ToBeDeprecated)

new category: MDCNavigationBarColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toNavigationBar: in MDCNavigationBarColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCNavigationBarColorThemer
To:c:objc(cy)MDCNavigationBarColorThemer@ToBeDeprecated

PageControl+ColorThemer

MDCPageControlColorThemer(ToBeDeprecated)

new category: MDCPageControlColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toPageControl: in MDCPageControlColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCPageControlColorThemer
To:c:objc(cy)MDCPageControlColorThemer@ToBeDeprecated

ProgressView+ColorThemer

MDCProgressViewColorThemer(ToBeDeprecated)

new category: MDCProgressViewColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toProgressView: in MDCProgressViewColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCProgressViewColorThemer
To:c:objc(cy)MDCProgressViewColorThemer@ToBeDeprecated

Slider+ColorThemer

MDCSliderColorThemer(ToBeDeprecated)

new category: MDCSliderColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toSlider: in MDCSliderColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCSliderColorThemer
To:c:objc(cy)MDCSliderColorThemer@ToBeDeprecated

modified class method: +defaultSliderLightColorScheme in MDCSliderColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCSliderColorThemer
To:c:objc(cy)MDCSliderColorThemer@ToBeDeprecated

modified class method: +defaultSliderDarkColorScheme in MDCSliderColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCSliderColorThemer
To:c:objc(cy)MDCSliderColorThemer@ToBeDeprecated

Snackbar+ColorThemer

MDCSnackbarColorThemer(Deprecated)

new category: MDCSnackbarColorThemer(Deprecated)

modified class method: +applyColorScheme:toSnackbarMessageView: in MDCSnackbarColorThemer(Deprecated)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarColorThemer
To:c:objc(cy)MDCSnackbarColorThemer@Deprecated

Snackbar

MDCSnackbarManager

new property: defaultManager in MDCSnackbarManager

new property: messageTextColor in MDCSnackbarManager

new method: -suspendMessagesWithCategory: in MDCSnackbarManager

new property: buttonFont in MDCSnackbarManager

new property: snackbarMessageViewShadowColor in MDCSnackbarManager

new method: -buttonTitleColorForState: in MDCSnackbarManager

new property: alignment in MDCSnackbarManager

new method: -showMessage: in MDCSnackbarManager

new property: shouldApplyStyleChangesToVisibleSnackbars in MDCSnackbarManager

new method: -setBottomOffset: in MDCSnackbarManager

new property: messageFont in MDCSnackbarManager

new property: snackbarMessageViewBackgroundColor in MDCSnackbarManager

new method: -suspendAllMessages in MDCSnackbarManager

new property: delegate in MDCSnackbarManager

new method: -setPresentationHostView: in MDCSnackbarManager

new method: -resumeMessagesWithToken: in MDCSnackbarManager

new method: -setButtonTitleColor:forState: in MDCSnackbarManager

new method: -hasMessagesShowingOrQueued in MDCSnackbarManager

new method: -dismissAndCallCompletionBlocksWithCategory: in MDCSnackbarManager

new property: mdc_adjustsFontForContentSizeCategory in MDCSnackbarManager

MDCSnackbarManager(LegacyAPI)

new category: MDCSnackbarManager(LegacyAPI)

modified property: snackbarMessageViewBackgroundColor in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified class method: +hasMessagesShowingOrQueued in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified property: shouldApplyStyleChangesToVisibleSnackbars in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified property: delegate in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified class method: +setButtonTitleColor:forState: in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified property: alignment in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified property: messageTextColor in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified class method: +suspendAllMessages in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified class method: +resumeMessagesWithToken: in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified class method: +showMessage: in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified class method: +setBottomOffset: in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified property: messageFont in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified property: mdc_adjustsFontForContentSizeCategory in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified class method: +dismissAndCallCompletionBlocksWithCategory: in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified class method: +setPresentationHostView: in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified class method: +buttonTitleColorForState: in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified class method: +suspendMessagesWithCategory: in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified property: snackbarMessageViewShadowColor in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

modified property: buttonFont in MDCSnackbarManager(LegacyAPI)

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarManager
To:c:objc(cy)MDCSnackbarManager@LegacyAPI

Tabs+ColorThemer

MDCTabBarColorThemer(ToBeDeprecated)

new category: MDCTabBarColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toTabBar: in MDCTabBarColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTabBarColorThemer
To:c:objc(cy)MDCTabBarColorThemer@ToBeDeprecated

TextFields+ColorThemer

MDCTextFieldColorThemer(ToBeDeprecated)

new category: MDCTextFieldColorThemer(ToBeDeprecated)

modified class method: +applyColorScheme:toAllTextInputControllersOfClass: in MDCTextFieldColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTextFieldColorThemer
To:c:objc(cy)MDCTextFieldColorThemer@ToBeDeprecated

modified class method: +applyColorScheme:toTextInputController: in MDCTextFieldColorThemer(ToBeDeprecated)

Type of change:parent.usr
From:c:objc(cs)MDCTextFieldColorThemer
To:c:objc(cy)MDCTextFieldColorThemer@ToBeDeprecated

Component changes

Tabs

Changes

schemes/Color

Changes

FeatureHighlight

Changes

AppBar

Changes

Ink

Changes

Buttons

Changes

ButtonBar

Changes

TextFields

Changes

Chips

Changes

Snackbar

Changes

Cards

Changes

BottomAppBar

Changes

Slider

Changes

NavigationBar

Changes

ActivityIndicator

Changes

Dialogs

Changes

BottomNavigation

Changes

PageControl

Changes

HeaderStackView

Changes

FlexibleHeader

Changes

ProgressView

Changes


59.2.2

This patch release undoes some additional App Bar initialization changes that were introduced in v59.2.0.

Component changes

AppBar

Changes


59.2.1

This patch release reverts an unintentional change in App Bar shadow layer initialization behavior that was introduced in v59.2.0.

Component changes

AppBar

Changes


59.2.0

This minor release introduces several new improvements to the AppBar component and bug fixes and accessibility improvements to various components.

New features

AppBar's documentation has been updated to reflect all of the most modern APIs and behavioral flags.

AppBar also now exposes a new MDCAppBarViewController API which is meant to be a more familiar replacement API for MDCAppBar.

A typical migration diff will look something like so (in Swift):

// Step 1
-  let appBar = MDCAppBar()
+  let appBarViewController = MDCAppBarViewController()

// Step 2
-    self.addChildViewController(appBar.headerViewController)
+    self.addChildViewController(appBarViewController)

// Step 3
-    appBar.addSubviewsToParent()
+    view.addSubview(appBarViewController.view)
+    appBarViewController.didMove(toParentViewController: self)

API changes

AppBar+ColorThemer

MDCAppBarColorThemer

new class method: +applySurfaceVariantWithColorScheme:toAppBarViewController: in MDCAppBarColorThemer

new class method: +applyColorScheme:toAppBarViewController: in MDCAppBarColorThemer

AppBar

MDCAppBar

new property: appBarViewController in MDCAppBar

MDCAppBarNavigationControllerDelegate

new method: -appBarNavigationController:willAddAppBarViewController:asChildOfViewController: in MDCAppBarNavigationControllerDelegate

MDCAppBarNavigationController

new method: -appBarViewControllerForViewController: in MDCAppBarNavigationController

MDCAppBarContainerViewController

new property: appBarViewController in MDCAppBarContainerViewController

MDCAppBarViewController

new class: MDCAppBarViewController

AppBar+TypographyThemer

MDCAppBarTypographyThemer

new class method: +applyTypographyScheme:toAppBarViewController: in MDCAppBarTypographyThemer

TextFields

MDCTextInputController

new method: -setHelperText:helperAccessibilityLabel: in MDCTextInputController

Component changes

Tabs

Changes

AppBar

Changes

TextFields

Changes

Chips

Changes

Snackbar

Changes

BottomAppBar

Changes

NavigationBar

Changes

BottomSheet

Changes

Dialogs

Changes

BottomNavigation

Changes

FlexibleHeader

Changes

ShadowElevations

Changes


59.1.1

This patch release fixes a bug with Flexible Header when VoiceOver is enabled.

API changes

Component changes

FlexibleHeader

Changes


59.1.0

AppBar and FlexibleHeader shipped several new features in this release and Snackbar's manager is now implemented as a true singleton. This release also includes additional accessibility improvements and examples, and also fixes some bugs.

New features

The new MDCAppBarNavigationController class is a simpler integration strategy for adding an App Bar to an application. Example:

let navigationController = MDCAppBarNavigationController()

// Will automatically inject an AppBar into the view controller if one is not already present.
navigationController.pushViewController(viewController, animated: true)

This new API enables all of the new AppBar and FlexibleHeader behaviors, meaning view controllers will better handle being presented in non-full screen settings. If you have already integrated with App Bar, migrating to MDCAppBarNavigationController will allow you to delete a substantial amount of boilerplate from your application. Most notably, MDCAppBarNavigationController enables the new observesTrackingScrollViewScrollEvents feature on FlexibleHeader, meaning you do not need to forward scroll view events to the navigation controller.

At a minimum you will need to implement the MDCAppBarNavigationController's delegate to theme the injected App Bars. Implement the delegate like so:

navigationController.delegate = self

// MARK: MDCAppBarNavigationControllerInjectorDelegate

func appBarNavigationController(_ navigationController: MDCAppBarNavigationController,
                                willAdd appBar: MDCAppBar,
                                asChildOf viewController: UIViewController) {
  let colorScheme: MDCSemanticColorScheme = <# Fetch your color scheme #>
  let typographyScheme: MDCTypographyScheme = <# Fetch your typography scheme #>
  MDCAppBarColorThemer.applySemanticColorScheme(colorScheme, to: appBar)
  MDCAppBarTypographyThemer.applyTypographyScheme(typographyScheme, to: appBar)

  // Additional configuration of appBar if needed.
}

AppBar's new inferTopSafeAreaInsetFromViewController property enables App Bars to be presented in non-full-screen contexts, such as iPad popovers or extensions. Consider enabling this property by default in all use cases.

FlexibleHeader's new observesTrackingScrollViewScrollEvents property allows the FlexibleHeader to automatically observe content offset changes to the tracking scroll view, removing the need for forwarding the UIScrollViewDelegate events to the FlexibleHeader. Note: you can only use this new feature if you have not enabled the shift behavior.

MDCSnackbarManager is now implemented as a true singleton with the ability to also create individual instances, making it possible to write self-contained tests for the component.

API changes

AppBar

MDCAppBarNavigationController

new class: MDCAppBarNavigationController

new property: delegate in MDCAppBarNavigationController

new method: -appBarForViewController: in MDCAppBarNavigationController

MDCAppBarNavigationControllerDelegate

new protocol: MDCAppBarNavigationControllerDelegate

new method: -appBarNavigationController:willAddAppBar:asChildOfViewController: in MDCAppBarNavigationControllerDelegate

MDCAppBar

new property: inferTopSafeAreaInsetFromViewController in MDCAppBar

FlexibleHeader

MDCFlexibleHeaderView

new property: observesTrackingScrollViewScrollEvents in MDCFlexibleHeaderView

Component changes

AppBar

Changes

Ink

Changes

Snackbar

Changes

Cards

Changes

LibraryInfo

Changes

Dialogs

Changes

BottomNavigation

Changes

FlexibleHeader

Changes


59.0.0

This major release removed the remaining encoding/decoding behaviors from components (tracking project) and fixed a variety of bugs in FlexibleHeader with relation to safe area insets.

Breaking changes

AppBar, TextFields, BottomNavigation, and Ink all removed support for encoding/decoding their custom properties.

New features

FlexibleHeader has a new behavior, inferTopSafeAreaInsetFromViewController, which allows the flexible header to determine its safe area insets from its view controller context, rather than always assuming that the header will consume the entire screen. This new behavior is most useful in extensions and on the iPad when presenting modal dialogs or popovers. To enable the new behavior, you simply set inferTopSafeAreaInsetFromViewController on MDCFlexibleHeaderViewController to YES.

API changes

FlexibleHeader

MDCFlexibleHeaderView

new property: topSafeAreaGuide in MDCFlexibleHeaderView

MDCFlexibleHeaderViewController

new property: inferTopSafeAreaInsetFromViewController in MDCFlexibleHeaderViewController

TextFields

MDCTextInputControllerLegacyFullWidth

modified class: MDCTextInputControllerLegacyFullWidth

Type of change:Declaration
From:@interface MDCTextInputControllerLegacyFullWidth : MDCTextInputControllerFullWidth <NSSecureCoding>
To:@interface MDCTextInputControllerLegacyFullWidth : MDCTextInputControllerFullWidth

MDCTextInputUnderlineView

modified class: MDCTextInputUnderlineView

Type of change:Declaration
From:@interface MDCTextInputUnderlineView : UIView <NSCopying, NSSecureCoding>
To:@interface MDCTextInputUnderlineView : UIView <NSCopying>

MDCTextInputController

modified protocol: MDCTextInputController

Type of change:Declaration
From:@protocol MDCTextInputController <NSObject, NSSecureCoding, NSCopying, MDCTextInputPositioningDelegate>
To:@protocol MDCTextInputController <NSObject, NSCopying, MDCTextInputPositioningDelegate>

Component changes

AppBar

Breaking changes

Ink

Breaking changes

TextFields

Breaking changes

BottomAppBar

Changes

BottomSheet

Changes

BottomNavigation

Breaking changes

FlexibleHeader

Changes


58.0.0

This major release focused on accessibility and removing property coding/encoding from a variety of components. It also fixed a bug related to AppBar/FlexibleHeader top layout guide behavior on pre-iOS 11 devices.

Breaking changes

Property encoding/decoding has been removed from a majority of the components, along with any related explicit conformances to NSCoding and NSSecureCoding. See the tracking project to learn more about the status of this work.

MDCNavigationBar's deprecated useFlexibleTopBottomInsets has been removed.

New features

A variety of accessibility documentation has been added to many of the components.

BottomNavigation has new parameters for the top padding of the nav bar items and the vertical spacing between the icon and title.

API changes

BottomNavigation

MDCBottomNavigationBar

new property: itemsContentInsets in MDCBottomNavigationBar

new property: itemsContentHorizontalMargin in MDCBottomNavigationBar

new property: itemsContentVerticalMargin in MDCBottomNavigationBar

NavigationBar

MDCNavigationBar

removed property: useFlexibleTopBottomInsets in MDCNavigationBar

Component changes

AppBar

Breaking changes

Changes

Ink

Changes

Buttons

Breaking changes

Changes

ButtonBar

Breaking changes

TextFields

Changes

Chips

Breaking changes

Changes

Cards

Breaking changes

Changes

Slider

Changes

NavigationBar

Breaking changes

Changes

ShadowLayer

Breaking changes

ActivityIndicator

Changes

BottomSheet

Changes

Dialogs

Changes

BottomNavigation

Changes

AnimationTiming

Changes

HeaderStackView

Breaking changes

FlexibleHeader

Breaking changes

Changes

ProgressView

Changes


57.0.0

In this release we have added the List component, made accessibility improvements to Bottom Sheet, added Shapes support for Chips and Bottom Sheet, made Catalog visual improvements, and other bug fixes.

Breaking changes

TextFields

We have removed property backgroundColor from MDCTextInputControllerBase and properties backgroundColor and backgroundColorDefault from MDCTextInputController. The reason for removal was due to these properties not being used by the controller in any meaningful way, and therefore this should not produce any changes.

New features

BottomSheet

VoiceOver and switch device users currently have to use the accessibility escape gesture to dismiss a Bottom Sheet. Optionally, the BottomSheet can use the dimmed “scrim” area (which can be tappable) to dismiss the bottom sheet using accessibility technologies.

As an example of how this could be used by clients, here's how our AppDelegate would change to support a VoiceOver button for dismissal:

let menuViewController = MDCMenuViewController(style: .plain)
let bottomSheet = MDCBottomSheetController(contentViewController: menuViewController)
bottomSheet.dismissOnBackgroundTap = true
bottomSheet.isScrimAccessibilityElement = true
bottomSheet.scrimAccessibilityLabel = "Close"
self.present(bottomSheet, animated: true, completion: nil)

Cards

You can now set the car to be interactable or not. Our specification for cards explicitly define a card as being an interactable component. Therefore, the interactable property should be set to NO only if there are other interactable items within the card's content, such as buttons or other tappable controls. To set the interactability to no in your cards:

let card = MDCCard()
card.isInteractable = false

let cardCell = MDCCardCollectionCell()
cardCell.isInteractable = false

List

We now have a new component, List! See more information about the component here: https://github.com/material-components/material-components-ios/tree/develop/components/List

API changes

BottomSheet

MDCBottomSheetTransitionController(ScrimAccessibility)

new category: MDCBottomSheetTransitionController(ScrimAccessibility)

new property: isScrimAccessibilityElement in MDCBottomSheetTransitionController(ScrimAccessibility)

new property: scrimAccessibilityLabel in MDCBottomSheetTransitionController(ScrimAccessibility)

new property: scrimAccessibilityHint in MDCBottomSheetTransitionController(ScrimAccessibility)

new property: scrimAccessibilityTraits in MDCBottomSheetTransitionController(ScrimAccessibility)

MDCBottomSheetController

new property: scrimAccessibilityHint in MDCBottomSheetController

new property: isScrimAccessibilityElement in MDCBottomSheetController

new property: state in MDCBottomSheetController

new method: -shapeGeneratorForState: in MDCBottomSheetController

new property: scrimAccessibilityLabel in MDCBottomSheetController

new method: -setShapeGenerator:forState: in MDCBottomSheetController

new property: scrimAccessibilityTraits in MDCBottomSheetController

MDCSheetState

new enum: MDCSheetState with values MDCSheetStateExtended, MDCSheetStatePreferred, and MDCSheetStateClosed

MDCBottomSheetPresentationControllerDelegate

new method: -bottomSheetWillChangeState:sheetState: in MDCBottomSheetPresentationControllerDelegate

MDCBottomSheetPresentationController

new property: scrimAccessibilityLabel in MDCBottomSheetPresentationController

new property: isScrimAccessibilityElement in MDCBottomSheetPresentationController

new property: scrimAccessibilityTraits in MDCBottomSheetPresentationController

new property: scrimAccessibilityHint in MDCBottomSheetPresentationController

Cards

MDCCardCollectionCell

new property: interactable in MDCCardCollectionCell

MDCCard

new property: interactable in MDCCard

List

New component.

TextFields

MDCTextInputControllerFullWidth

new property: backgroundColor in MDCTextInputControllerFullWidth

new property: backgroundColorDefault in MDCTextInputControllerFullWidth

MDCTextInputControllerBase

removed property: backgroundColor in MDCTextInputControllerBase

MDCTextInputController

new property: textInputClearButtonTintColorDefault in MDCTextInputController

new property: textInputClearButtonTintColor in MDCTextInputController

removed property: backgroundColorDefault in MDCTextInputController

removed property: backgroundColor in MDCTextInputController

Typography

UIFont(MaterialSimpleEquality)

new method: -mdc_isSimplyEqual: in UIFont(MaterialSimpleEquality)

new category: UIFont(MaterialSimpleEquality)

Component changes

Tabs

Changes

FeatureHighlight

Changes

Buttons

Changes

TextFields

Changes

Chips

Changes

Cards

Changes

List

Changes

BottomSheet

Changes

Typography

Changes

BottomNavigation

Changes

FlexibleHeader

Changes


56.0.0

In this release we updated the icon layout of MDCTextFields add accessibilty docs for MDCButton and some more MDCBottomNavigation examples. We also tweeked the MDCChipView and MDCButtonBar buttons.

Breaking changes

New layout for MDCTextField's with icons

API changes

TextFields

MDCLeadingViewTextInput

new protocol: MDCLeadingViewTextInput

new property: leadingView in MDCLeadingViewTextInput

new property: leadingViewMode in MDCLeadingViewTextInput

MDCTextInputPositioningDelegate

new method: -leadingViewTrailingPaddingConstant in MDCTextInputPositioningDelegate

new method: -leadingViewRectForBounds:defaultRect: in MDCTextInputPositioningDelegate

new method: -trailingViewTrailingPaddingConstant in MDCTextInputPositioningDelegate

new method: -trailingViewRectForBounds:defaultRect: in MDCTextInputPositioningDelegate

MDCTextField

modified class: MDCTextField

Type of change:Swift declaration
From:class MDCTextField : MDCTextInput
To:class MDCTextField : MDCTextInput, MDCLeadingViewTextInput

modified class: MDCTextField

Type of change:Declaration
From:@interface MDCTextField : UITextField <MDCTextInput>
To:@interface MDCTextField : UITextField <MDCTextInput, MDCLeadingViewTextInput>

Component changes

Buttons

Changes

ButtonBar

Changes

TextFields

Changes

Chips

Changes

BottomNavigation

Changes


55.5.0

API changes

TextFields

MDCTextField

new property: inputLayoutStrut in MDCTextField

Component changes

Buttons

Changes

ButtonBar

Changes

TextFields

Changes

Chips

Changes

BottomNavigation

Changes


55.4.0

This minor release includes better layout guide and safe area insets support to MDCAppBar's MDCAppBarContainerViewController, added customization to MDCNavigationBar title view layout, accessibility improvements and documentation.

New deprecations

MDCNavigationBar's property useFlexibleTopBottomInsets has been defaulted to YES and has now been deprecated. It will eventually be removed and become the default behavior.

New features

AppBar now allows its wrapped content view controllers to make proper use of the top layout guide and additional safe area insets APIs. This is done using the newly added property to AppBar's MDCAppBarContainerViewController named topLayoutGuideAdjustmentEnabled. An example on how to implement this behavior:

MDCAppBarContainerViewController *appBarContainerViewController;
UITableViewController *tableViewController =
    [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
appBarContainerViewController =
    [[MDCAppBarContainerViewController alloc] initWithContentViewController:tableViewController];
self.appBarContainerViewController.topLayoutGuideAdjustmentEnabled = YES;

NavigationBar now allows configuration of its title view layout behavior to be either “fill” or “center”. The fill behavior is the default and existing behavior, which sets the title view‘s frame to fill the available navigation bar space. The center behavior will always attempt to center the title view within the navigation bar’s bounds. The center behavior is desired by teams in the simple cases of when they want their title view to be centered within the navigation bar as best as possible. This is also the default behavior of UINavigationBar. Example usage:

MDCNavigationBar *navBar = [[MDCNavigationBar alloc] init];
navBar.titleView = [[UIView alloc] init];
navBar.titleViewLayoutBehavior = MDCNavigationBarTitleViewLayoutBehaviorCenter;

API changes

AppBar

MDCAppBarContainerViewController

new property: topLayoutGuideAdjustmentEnabled in MDCAppBarContainerViewController

NavigationBar

MDCNavigationBar

new property: titleViewLayoutBehavior in MDCNavigationBar

deprecated property: useFlexibleTopBottomInsets in MDCNavigationBar

Type of change:Deprecation message
From:useFlexibleTopBottomInsets
To:Implement proper vertical alignment with the default YES behavior.

new enum MDCNavigationBarTitleViewLayoutBehavior with values MDCNavigationBarTitleViewLayoutBehaviorFill and MDCNavigationBarTitleViewLayoutBehaviorCenter.

Component changes

AppBar

Changes

Buttons

Changes

TextFields

Changes

Snackbar

Changes

Slider

Changes

NavigationBar

Changes

BottomSheet

Changes

Typography

Changes

PageControl

Changes

Collections

Changes

HeaderStackView

Changes

FlexibleHeader

Changes


55.3.0

This minor release includes added customization to MDCDialogPresentationController, better topLayoutGuide support for MDCFlexibleHeader, doc improvements and other small bug fixes.

New features

Flexible header has a new behavioral flag for opting in to better topLayoutGuide support. This is primarily useful when using the flexible header container view controller. To opt in to this new behavior, do the following:

let container = MDCFlexibleHeaderContainerViewController()
container.isTopLayoutGuideAdjustmentEnabled = true

Dialogs now offer customizable cornerRadius support to enable proper shadowing. You can set the dialog corner radius like so:


// We set the corner radius to adjust the shadow that is implemented via the trackingView in the // presentation controller. if let presentationController = presentedController.mdc_dialogPresentationController { presentationController.dialogCornerRadius = presentedController.view.layer.cornerRadius }

API changes

Dialogs

MDCDialogPresentationController

new property: dialogCornerRadius in MDCDialogPresentationController

FlexibleHeader

MDCFlexibleHeaderContainerViewController

new property: topLayoutGuideAdjustmentEnabled in MDCFlexibleHeaderContainerViewController

MDCFlexibleHeaderViewController(ToBeDeprecated)

new category: MDCFlexibleHeaderViewController(ToBeDeprecated)

moved method: -updateTopLayoutGuide from class MDCFlexibleHeaderViewController to category MDCFlexibleHeaderViewController(ToBeDeprecated)

MDCFlexibleHeaderViewController

new property: topLayoutGuideAdjustmentEnabled in MDCFlexibleHeaderViewController

new property: topLayoutGuideViewController in MDCFlexibleHeaderViewController

Component changes

Tabs

Changes

FeatureHighlight

Changes

AppBar

Changes

Buttons

Changes

ButtonBar

Changes

TextFields

Changes

Chips

Changes

Snackbar

Changes

Cards

Changes

BottomAppBar

Changes

Slider

Changes

NavigationBar

Changes

ActivityIndicator

Changes

BottomSheet

Changes

Dialogs

Changes

BottomNavigation

Changes

PageControl

Changes

FlexibleHeader

Changes

ProgressView

Changes


55.2.0

This minor release includes new Snackbar features and minor improvements to the Catalog.

New features

Snackbar now allows you to change the snackbar message alignment on iPad. For example:

MDCSnackbarManager.alignment = MDCSnackbarAlignmentLeading;

Snackbar also exposes a delegate for theming snackbar messages.

MDCSnackbarManager.delegate = appDelegate;

- (void)willPresentSnackbarWithMessageView:(nullable MDCSnackbarMessageView *)messageView {
  // You can theme the individual messageView.actionButtons here.
}

There is a new shadow elevation constant, MDCShadowElevationBottomNavigationBar.

API changes

ShadowElevations

MDCShadowElevationBottomNavigationBar

new constant: MDCShadowElevationBottomNavigationBar

Snackbar

MDCSnackbarAlignment

new enum value: MDCSnackbarAlignmentCenter in MDCSnackbarAlignment

new enum value: MDCSnackbarAlignmentLeading in MDCSnackbarAlignment

new enum: MDCSnackbarAlignment

MDCSnackbarMessageView

new property: actionButtons in MDCSnackbarMessageView

MDCSnackbarManager

new property: delegate in MDCSnackbarManager

new property: alignment in MDCSnackbarManager

MDCSnackbarManagerDelegate

new protocol: MDCSnackbarManagerDelegate

new method: -willPresentSnackbarWithMessageView: in MDCSnackbarManagerDelegate

Component changes

Tabs

Changes

schemes/Typography

Changes

FeatureHighlight

Changes

AppBar

Changes

Buttons

Changes

ButtonBar

Changes

TextFields

Changes

Chips

Changes

Snackbar

Changes

Slider

Changes

NavigationBar

Changes

ActivityIndicator

Changes

Typography

Changes

Dialogs

Changes

BottomNavigation

Changes

FlexibleHeader

Changes

ShadowElevations

Changes


55.1.0

This minor release introduces some new features to Flexible Header and Snackbar and includes some bug fixes in the Catalog app.

Upcoming deprecations

MDCFlexibleHeaderViewController's -updateTopLayoutGuide will be deprecated in the future. It should no longer be necessary to call this API if you are using an MDCFlexibleHeaderContainerViewController.

API changes

Snackbar

MDCSnackbarManager

new class method: +hasMessagesShowingOrQueued in MDCSnackbarManager

Component changes

Tabs

Changes

schemes/Color

Changes

schemes/Typography

Changes

FeatureHighlight

Changes

Buttons

Changes

Snackbar

Changes

Cards

Changes

BottomAppBar

Changes

Dialogs

Changes

Themes

Changes

ShadowElevations

Changes


55.0.4

This patch release adds metadata to the bidirectionality eng stub doc.


55.0.3

This patch release adds documentation polish around bidirectionality.


55.0.2

This patch release includes more documentation polish and a bug fix for Cards theming.

Component changes

Tabs

Changes

schemes/Color

Changes

schemes/Typography

Changes

FeatureHighlight

Changes

Ink

Changes

Buttons

Changes

ButtonBar

Changes

TextFields

Changes

Chips

Changes

Snackbar

Changes

Cards

Changes

BottomAppBar

Changes

Slider

Changes

LibraryInfo

Changes

ShadowLayer

Changes

BottomSheet

Changes

Dialogs

Changes

PageControl

Changes

FlexibleHeader

Changes

ShadowElevations

Changes

ProgressView

Changes

Palettes

Changes


55.0.1

This patch release polishes and fleshes out documentation across many of our components. There are no source changes in this release.

Component changes

MaskedTransition

Changes

schemes/Color

Changes

schemes/Typography

Changes

FeatureHighlight

Changes

AppBar

Changes

CollectionCells

Changes

ButtonBar

Changes

TextFields

Changes

Cards

Changes

BottomAppBar

Changes

NavigationBar

Changes

OverlayWindow

Changes

ShadowLayer

Changes

ActivityIndicator

Changes

BottomSheet

Changes

BottomNavigation

Changes

PageControl

Changes

AnimationTiming

Changes

Collections

Changes

HeaderStackView

Changes

FlexibleHeader

Changes

ShadowElevations

Changes

ProgressView

Changes

CollectionLayoutAttributes

Changes


55.0.0

This major release introduces breaking changes to CocoaPods dependencies. Please read the breaking changes section for more details.

This release also includes a significant amount of documnetation polish and some accessibility bug fixes.

Breaking changes

CocoaPods +Extension targets have been removed and replaced with more specific targets for the individual extensions. For example, if you were importing a component's extensions like this before:

pod 'MaterialComponents/Buttons+Extensions'

You‘ll now need to depend on the individual Button extension targets that you’re making use of:

pod 'MaterialComponents/Buttons+ButtonThemer'

To see a full list of available extensions for a given component, read the MaterialComponents.podspec file.

API changes

Component changes

Tabs

Changes

schemes/Color

Changes

schemes/Typography

Changes

FeatureHighlight

Changes

AppBar

Changes

Buttons

Changes

ButtonBar

Changes

TextFields

Changes

Chips

Changes

Snackbar

Changes

Cards

Changes

BottomAppBar

Changes

Slider

Changes

NavigationBar

Changes

ShadowLayer

Changes

ActivityIndicator

Changes

BottomSheet

Changes

Typography

Changes

Dialogs

Changes

BottomNavigation

Changes

PageControl

Changes

AnimationTiming

Changes

Collections

Changes

HeaderStackView

Changes

FlexibleHeader

Changes

Themes

Changes

ProgressView

Changes

Palettes

Changes


54.13.0

This release focused on documentation across all of our componentry and introduced new outlined themes for components. There have also been significant improvements to theming in the MDCCatalog app.

Breaking changes

New features

Buttons, Cards, and Chips now support outlined themes.

// Buttons:
[MDCOutlinedButtonThemer applyScheme:buttonScheme toButton:outlinedButton];

// Cards:
[MDCCardThemer applyOutlinedVariantWithScheme:cardScheme toCard:component];

// Chips:
[MDCChipViewThemer applyOutlinedVariantWithScheme:cardScheme toChipView:component];

Chip hit areas can now be modified using the new hitAreaInsets API:

chip.hitAreaInsets = UIEdgeInsetsMake(chipVerticalInset, 0, chipVerticalInset, 0);

API changes

Chips

MDCChipView

new property: hitAreaInsets in MDCChipView

Component changes

Tabs

Changes

MaskedTransition

Changes

schemes/Color

Changes

schemes/Typography

Changes

FeatureHighlight

Changes

AppBar

Changes

Ink

Changes

CollectionCells

Changes

Buttons

Changes

ButtonBar

Changes

TextFields

Changes

Chips

Changes

Snackbar

Changes

Cards

Changes

BottomAppBar

Changes

Slider

Changes

NavigationBar

Changes

OverlayWindow

Changes

LibraryInfo

Changes

ShadowLayer

Changes

ActivityIndicator

Changes

BottomSheet

Changes

Typography

Changes

Dialogs

Changes

BottomNavigation

Changes

PageControl

Changes

AnimationTiming

Changes

Collections

Changes

HeaderStackView

Changes

FlexibleHeader

Changes

Themes

Changes

ShadowElevations

Changes

ProgressView

Changes

Palettes

Changes

CollectionLayoutAttributes

Changes


54.12.0

This release introduces umbrella headers for all themer targets. We encourage you to start using the new umbrella headers for all themer APIs.

For example, Swift imports would change like so:

// Before
import MaterialComponents.MDCActivityIndicatorColorThemer
// After
import MaterialComponents.MaterialActivityIndicator_ColorThemer

While Objective-C imports would change like so:

// Before
#import "MDCAppBarColorThemer.h"
// After
#import "MaterialAppBar+ColorThemer.h"

We are focused on polishing the Catalog with the new theming systems and updating our component documentation accordingly. Few new features, if any, will be added over the next few releases.

API changes

Component changes

Tabs

Changes

schemes/Color

Changes

FeatureHighlight

Changes

AppBar

Changes

Ink

Changes

Buttons

Changes

ButtonBar

Changes

TextFields

Changes

Chips

Changes

Snackbar

Changes

Cards

Changes

BottomAppBar

Changes

Slider

Changes

NavigationBar

Changes

ActivityIndicator

Changes

BottomSheet

Changes

Dialogs

Changes

BottomNavigation

Changes

PageControl

Changes

AnimationTiming

Changes

HeaderStackView

Changes

FlexibleHeader

Changes

ShadowElevations

Changes

ProgressView

Changes


54.11.1

Component changes

ButtonBar

Changes


54.11.0

This release is the final push towards supporting themers on our components.

We will now shift focus to polishing APIs, documentation, and examples and to fixing bugs.

New features

It is now possible to configure colors on BottomNavigation, ButtonBar, NavigationBar, and Tabs statefully.

TextFields now allows customization of the active floating placeholder color.

MDCTabBar now allows the display of a bottom divider using the bottomDividerColor API.

API changes

BottomNavigation

MDCBottomNavigationBar

new property: selectedItemTitleColor in MDCBottomNavigationBar

ButtonBar

MDCButtonBar

new method: -buttonsTitleColorForState: in MDCButtonBar

new method: -setButtonsTitleColor:forState: in MDCButtonBar

Buttons

MDCButton

new method: -imageTintColorForState: in MDCButton

new method: -setImageTintColor:forState: in MDCButton

NavigationBar

MDCNavigationBar

new method: -setButtonsTitleColor:forState: in MDCNavigationBar

new method: -buttonsTitleColorForState: in MDCNavigationBar

Tabs

MDCTabBarItemState

new typedef: MDCTabBarItemState

new enum value: MDCTabBarItemStateSelected in MDCTabBarItemState

new enum: MDCTabBarItemState

new enum value: MDCTabBarItemStateNormal in MDCTabBarItemState

MDCTabBar

new method: -imageTintColorForState: in MDCTabBar

new method: -titleColorForState: in MDCTabBar

new method: -setImageTintColor:forState: in MDCTabBar

new property: bottomDividerColor in MDCTabBar

new method: -setTitleColor:forState: in MDCTabBar

TextFields

MDCTextInputControllerFloatingPlaceholder

new property: floatingPlaceholderActiveColorDefault in MDCTextInputControllerFloatingPlaceholder

new property: floatingPlaceholderActiveColor in MDCTextInputControllerFloatingPlaceholder

Component changes

Tabs

Changes

AppBar

Changes

Buttons

Changes

ButtonBar

Changes

TextFields

Changes

Snackbar

Changes

NavigationBar

Changes

BottomNavigation

Changes


54.10.0

This release continues to increase coverage of themers across our components.

New features

ButtonBar now has a Typography themer.

NavigationBar now has APIs for customizing title button fonts.

API changes

NavigationBar

MDCNavigationBar

new method: -setButtonsTitleFont:forState: in MDCNavigationBar

new method: -buttonsTitleFontForState: in MDCNavigationBar

Component changes

Buttons

Changes

ButtonBar

Changes

Chips

Changes

NavigationBar

Changes


54.9.0

This release continues to improve the support for our themer APIs across all components.

New features

Button Bar now allows button typography to be configured.

Floating buttons and contained buttons now have themers.

AppBar and Tabs now have a surface variant color themer API.

Slider now has a color themer.

API changes

ButtonBar

MDCButtonBar

new method: -setButtonsTitleFont:forState: in MDCButtonBar

new method: -buttonsTitleFontForState: in MDCButtonBar

Component changes

Tabs

Changes

AppBar

Changes

Ink

Changes

Buttons

Changes

ButtonBar

Changes

Chips

Changes

Slider

Changes

ShadowLayer

Changes


54.8.0

This new release introduces shapes support to buttons and a variety of new themer APIs for many components.

New features

Buttons can now be styled with different shape outlines. Example usage:

MDCRectangleShapeGenerator *raisedShapeGenerator =
    [[MDCRectangleShapeGenerator alloc] init];
[raisedShapeGenerator setCorners:[[MDCCutCornerTreatment alloc] initWithCut:8.f]];
button.shapeGenerator = raisedShapeGenerator;

There is a new Text Button API for theming an MDCButton to make complete use of typography, color, and other configurable properties of a button's design. A button themed as a text button is closely equivalent to the MDCFlatButton class, MDCFlatButton will soon be deprecated as a result in favor of the following pattern:

// Define your button's scheme somewhere centrally in your app.
let buttonScheme = MDCButtonScheme()
buttonScheme.colorScheme = myAppColorScheme

// Apply the button scheme to an MDCButton to give it the appearance of a text button.
// button: MDCButton
MDCTextButtonThemer.applyScheme(buttonScheme, to: button)

NavigationBar and FlexibleHeader now both have a surface variant themer.

Chips and Tabs have updated color themers.

API changes

Buttons

MDCButton

new property: shapeGenerator in MDCButton

Component changes

Tabs

Changes

Buttons

Changes

Chips

Changes

NavigationBar

Changes

FlexibleHeader

Changes


54.7.0

This release introduces a new API for compositing colors for use by color themers.

API diff

schemes/Color

new method: MDCSemanticColorScheme +blendColor:withBackgroundColor:

Component changes

schemes/Color

Changes

ButtonBar

Changes

Cards

Changes


54.6.1

This is a hotfix release fixing a bug in ButtonBar that was introduced in 54.6.0.

Component changes

ButtonBar

Changes


54.6.0

This release introduces new APIs and themers for customizing typography and color. This release also fixes a bug in NavigationBar affecting title label kerning for system fonts. This may result in visual changes for navigation bar instances.

New features

AppBar now has a Typography themer.

Buttons now has a raised button color themer.

BottomSheets background tap-to-dismiss behavior can now be disabled with dismissOnBackgroundTap.

ButtonBar and NavigationBar's ink color can now be customized.

Cars now has a Color themer.

NavigationBar has a new opt-in behavioral change gated by the useFlexibleTopBottomInsets property. Enabling this property will result in new layout behavior for the navigation bar's titleView. This flag will be enabled by default in the future. Consider enabling this flag on your navigation bar instances in order to verify that the new behavior will not cause regressions in your app.

TextFields now expose a backgroundColor property.

API changes

BottomSheet

MDCBottomSheetPresentationController

new property: dismissOnBackgroundTap in MDCBottomSheetPresentationController

MDCBottomSheetTransitionController

new property: dismissOnBackgroundTap in MDCBottomSheetTransitionController

MDCBottomSheetController

new property: dismissOnBackgroundTap in MDCBottomSheetController

ButtonBar

MDCButtonBar

new property: inkColor in MDCButtonBar

NavigationBar

MDCNavigationBar

new property: inkColor in MDCNavigationBar

new property: useFlexibleTopBottomInsets in MDCNavigationBar

TextFields

MDCTextInputControllerBase

new property: backgroundColor in MDCTextInputControllerBase

MDCTextInputController

new property: backgroundColorDefault in MDCTextInputController

new property: backgroundColor in MDCTextInputController

Component changes

AppBar

Changes

Buttons

Changes

ButtonBar

Changes

TextFields

Changes

Cards

Changes

NavigationBar

Changes

ActivityIndicator

Changes

BottomSheet

Changes

BottomNavigation

Changes


54.5.0

This release includes bug fixes and increased coverage of our themer APIs for components.

New features

Slider now exposes a variety of properties for customizing color, including new stateful color APIs. To make use of the new stateful APIs, you must enable statefulAPIEnabled on the MDCSlider instance.

BottomNavigationBar and Dialogs now both have a semantic color themer.

API changes

Slider

MDCSlider

new method: -setBackgroundTrackTickColor:forState: in MDCSlider

new property: valueLabelTextColor in MDCSlider

new method: -trackFillColorForState: in MDCSlider

new method: -backgroundTrackTickColorForState: in MDCSlider

new method: -setThumbColor:forState: in MDCSlider

new method: -trackBackgroundColorForState: in MDCSlider

new method: -setFilledTrackTickColor:forState: in MDCSlider

new method: -filledTrackTickColorForState: in MDCSlider

new method: -thumbColorForState: in MDCSlider

new method: -setTrackBackgroundColor:forState: in MDCSlider

new property: inkColor in MDCSlider

new property: statefulAPIEnabled in MDCSlider

new property: valueLabelBackgroundColor in MDCSlider

new method: -setTrackFillColor:forState: in MDCSlider

Component changes

ButtonBar

Changes

TextFields

Changes

Chips

Changes

Slider

Changes

ActivityIndicator

Changes

Dialogs

Changes

BottomNavigation

Changes


54.4.0

New features

Buttons now has a Typography themer.

MDCFlatButton now has a color themer API.

API changes

Component changes

Buttons

Changes


54.3.0

This release continues to expand our support for component Color and Typography theming.

New features

Buttons and Snackbar now have a Color themer.

BottomNavigationBar, Chips, NavigationBar, TextFields each now have a Typography themer.

Component changes

Buttons

Changes

TextFields

Changes

Chips

Changes

Snackbar

Changes

NavigationBar

Changes

BottomNavigation

Changes

FlexibleHeader

Changes


54.2.0

New features

Dialogs, FeatureHighlight, and TabBar now each have a Typography themer.

ActivityIndicator and AppBar now have an updated Color themer.

API changes

FeatureHighlight

MDCFeatureHighlightViewController

new property: titleFont in MDCFeatureHighlightViewController

new property: bodyFont in MDCFeatureHighlightViewController

TextFields

MDCTextInputController

new property: textInputFont in MDCTextInputController

new property: textInputFontDefault in MDCTextInputController

Component changes

Tabs

Changes

FeatureHighlight

Changes

AppBar

Changes

TextFields

Changes

Slider

Changes

NavigationBar

Changes

ActivityIndicator

Changes

Dialogs

Changes


54.1.0

New features

Snackbar now has a Typography themer.

NavigationBar now exposes a Color themer API that makes use of the MDCColorScheming type.

Component changes

FeatureHighlight

Changes

Ink

Changes

Snackbar

Changes

NavigationBar

Changes

Dialogs

Changes


54.0.1

Added missing CocoaPods dependencies from v54.0.0.


54.0.0

Breaking changes

MDCMaskedTransition has been removed and replaced with MDCMaskedTransitionController. You may now use MDCMaskedTransitionController as a standard UIKit transitioning delegate.

New features

Many components now expose new public APIs for configuring typography, color, and shapes.

API changes

Cards

MDCCardCollectionCell

new property: shapeGenerator in MDCCardCollectionCell

MDCCard

new property: shapeGenerator in MDCCard

Dialogs

MDCAlertController

new property: titleColor in MDCAlertController

new property: titleFont in MDCAlertController

new property: messageFont in MDCAlertController

new property: buttonTitleColor in MDCAlertController

new property: buttonFont in MDCAlertController

new property: messageColor in MDCAlertController

MaskedTransition

MDCMaskedTransition

removed class: MDCMaskedTransition

removed method: -init in MDCMaskedTransition

removed method: -initWithSourceView: in MDCMaskedTransition

removed property: calculateFrameOfPresentedView in MDCMaskedTransition

MDCMaskedTransitionController

new property: sourceView in MDCMaskedTransitionController

new method: -initWithSourceView: in MDCMaskedTransitionController

new method: -init in MDCMaskedTransitionController

new property: calculateFrameOfPresentedView in MDCMaskedTransitionController

new class: MDCMaskedTransitionController

NavigationBar

MDCNavigationBar

new property: titleFont in MDCNavigationBar

new property: titleTextColor in MDCNavigationBar

Snackbar

MDCSnackbarManager

new class method: +buttonTitleColorForState: in MDCSnackbarManager

new property: mdc_adjustsFontForContentSizeCategory in MDCSnackbarManager

new property: snackbarMessageViewBackgroundColor in MDCSnackbarManager

new property: shouldApplyStyleChangesToVisibleSnackbars in MDCSnackbarManager

new property: buttonFont in MDCSnackbarManager

new class method: +setButtonTitleColor:forState: in MDCSnackbarManager

new property: snackbarMessageViewShadowColor in MDCSnackbarManager

new property: messageTextColor in MDCSnackbarManager

new property: messageFont in MDCSnackbarManager

modified class method: +setPresentationHostView: in MDCSnackbarManager

Type of change:Declaration
From:+ (void)setPresentationHostView:(UIView *)hostView;
To:+ (void)setPresentationHostView:(nullable UIView *)hostView;

modified class method: +dismissAndCallCompletionBlocksWithCategory: in MDCSnackbarManager

Type of change:Declaration
From:+ (void)dismissAndCallCompletionBlocksWithCategory:(NSString *)category;
To:+ (void)dismissAndCallCompletionBlocksWithCategory: (nullable NSString *)category;

modified class method: +suspendMessagesWithCategory: in MDCSnackbarManager

Type of change:Swift declaration
From:class func suspendMessages(withCategory category: Any!) -> MDCSnackbarSuspensionToken!
To:class func suspendMessages(withCategory category: Any!) -> MDCSnackbarSuspensionToken?

modified class method: +suspendMessagesWithCategory: in MDCSnackbarManager

Type of change:Declaration
From:+ (id<MDCSnackbarSuspensionToken>)suspendMessagesWithCategory: (NSString *)category;
To:+ (nullable id<MDCSnackbarSuspensionToken>)suspendMessagesWithCategory: (nullable NSString *)category;

modified class method: +showMessage: in MDCSnackbarManager

Type of change:Swift declaration
From:class func show(_ message: MDCSnackbarMessage!)
To:class func show(_ message: MDCSnackbarMessage?)

modified class method: +showMessage: in MDCSnackbarManager

Type of change:Declaration
From:+ (void)showMessage:(MDCSnackbarMessage *)message;
To:+ (void)showMessage:(nullable MDCSnackbarMessage *)message;

modified class method: +suspendAllMessages in MDCSnackbarManager

Type of change:Swift declaration
From:class func suspendAllMessages() -> MDCSnackbarSuspensionToken!
To:class func suspendAllMessages() -> MDCSnackbarSuspensionToken?

modified class method: +suspendAllMessages in MDCSnackbarManager

Type of change:Declaration
From:+ (id<MDCSnackbarSuspensionToken>)suspendAllMessages;
To:+ (nullable id<MDCSnackbarSuspensionToken>)suspendAllMessages;

modified class method: +resumeMessagesWithToken: in MDCSnackbarManager

Type of change:Swift declaration
From:class func resumeMessages(with token: MDCSnackbarSuspensionToken!)
To:class func resumeMessages(with token: MDCSnackbarSuspensionToken?)

modified class method: +resumeMessagesWithToken: in MDCSnackbarManager

Type of change:Declaration
From:+ (void)resumeMessagesWithToken:(id<MDCSnackbarSuspensionToken>)token;
To:+ (void)resumeMessagesWithToken:(nullable id<MDCSnackbarSuspensionToken>)token;

Themes

MDCFontScheme

Moved to schemes/Typography.

MDCTonalPalette

Moved to schemes/Color.

MDCTonalColorScheme

Moved to schemes/Color.

MDCColorScheme

Moved to schemes/Color.

MDCBasicColorScheme

Moved to schemes/Color.

MDCBasicFontScheme

Moved to schemes/Typography.

schemes/Typography

New component.

Component changes

Tabs

Changes

MaskedTransition

Changes

schemes/Color

Changes

schemes/Typography

Changes

FeatureHighlight

Changes

AppBar

Changes

Ink

Changes

ButtonBar

Changes

TextFields

Changes

Chips

Changes

Snackbar

Changes

Cards

Changes

NavigationBar

Changes

Dialogs

Changes

FlexibleHeader

Changes

Themes

Changes


53.0.0

Component Changes

ButtonBar

Changes

NavigationBar

Changes


52.0.0

Breaking changes

BottomNavigation

  • Color themer now only uses primaryColor and applies it to the selectedItemTintColor. It will no longer apply values to either unselectedItemTintColor or barTintColor.

TextFields

  • TextFields will no longer default to using Dynamic Type.
  • TextFields with floating placeholders now account for the placeholder when computing their bounds.

API Changes

TextFields

MDCTextInputControllerLegacyDefault

modified class: MDCTextInputControllerLegacyDefault

Type of change:Swift declaration
From:class MDCTextInputControllerLegacyDefault : NSObject, MDCTextInputControllerFloatingPlaceholder
To:class MDCTextInputControllerLegacyDefault : MDCTextInputControllerBase

modified class: MDCTextInputControllerLegacyDefault

Type of change:Declaration
From:@interface MDCTextInputControllerLegacyDefault : NSObject <MDCTextInputControllerFloatingPlaceholder>
To:@interface MDCTextInputControllerLegacyDefault : MDCTextInputControllerBase

MDCTextInputControllerLegacyFullWidth

modified class: MDCTextInputControllerLegacyFullWidth

Type of change:Swift declaration
From:class MDCTextInputControllerLegacyFullWidth : NSObject, MDCTextInputController
To:class MDCTextInputControllerLegacyFullWidth : MDCTextInputControllerFullWidth, NSSecureCoding

modified class: MDCTextInputControllerLegacyFullWidth

Type of change:Declaration
From:@interface MDCTextInputControllerLegacyFullWidth : NSObject <MDCTextInputController>
To:@interface MDCTextInputControllerLegacyFullWidth : MDCTextInputControllerFullWidth <NSSecureCoding>

MDCTextInputController

removed property: textInputFont in MDCTextInputController

removed property: textInputFontDefault in MDCTextInputController

Color

New component.

Component changes

Tabs

Changes

schemes/Color

Changes

FeatureHighlight

Changes

Ink

Changes

Buttons

Changes

ButtonBar

Changes

TextFields

Changes

Chips

Changes

Snackbar

Changes

NavigationBar

Changes

LibraryInfo

Changes

Dialogs

Changes

BottomNavigation

Changes

PageControl

Changes

AnimationTiming

Changes

Collections

Changes

FlexibleHeader

Changes

Palettes

Changes


50.0.0

Breaking change

MDCTabBarFontThemer and MDCBottomAppBarColorThemer changed a argument to nonnull from nullable.

API changes

BottomNavigation

MDCBottomNavigationBar

new property: backgroundColor in MDCBottomNavigationBar

new property: barTintColor in MDCBottomNavigationBar

Chips

MDCChipView

new property: minimumSize in MDCChipView

Collections

MDCCollectionViewStyling

new property: cardBorderRadius in MDCCollectionViewStyling

TextFields

MDCTextInputController

new property: textInputFont in MDCTextInputController

new property: textInputFontDefault in MDCTextInputController

Component changes

Tabs

Changes

MaskedTransition

Changes

FeatureHighlight

Changes

AppBar

Changes

Ink

Changes

CollectionCells

Changes

Buttons

Changes

ButtonBar

Changes

TextFields

Changes

Chips

Changes

Snackbar

Changes

Cards

Changes

BottomAppBar

Changes

Slider

Changes

NavigationBar

Changes

OverlayWindow

Changes

LibraryInfo

Changes

ShadowLayer

Changes

ActivityIndicator

Changes

BottomSheet

Changes

Typography

Changes

Dialogs

Changes

BottomNavigation

Changes

PageControl

Changes

AnimationTiming

Changes

Collections

Changes

HeaderStackView

Changes

FlexibleHeader

Changes

Themes

Changes

ShadowElevations

Changes

ProgressView

Changes

Palettes

Changes

CollectionLayoutAttributes

Changes


49.0.0

Breaking changes

BottomAppBar

MDCBottomAppBarView

NS_UNAVAILABLE property: backgroundColor in MDCBottomAppBarView

API changes

BottomAppBar

MDCBottomAppBarView

new property: barTintColor in MDCBottomAppBarView

NS_UNAVAILABLE property: backgroundColor in MDCBottomAppBarView

new property: shadowColor in MDCBottomAppBarView

new property: backgroundColor in MDCBottomAppBarView

Dialogs

MDCAlertControllerView

new property: titleColor in MDCAlertControllerView

new property: mdc_adjustsFontForContentSizeCategory in MDCAlertControllerView

new class: MDCAlertControllerView

new property: titleFont in MDCAlertControllerView

new property: buttonColor in MDCAlertControllerView

new property: buttonFont in MDCAlertControllerView

new property: messageColor in MDCAlertControllerView

new property: messageFont in MDCAlertControllerView

Component changes

Snackbar

Changes

BottomAppBar

Changes

Dialogs

Changes

Themes

Changes


48.0.0

Breaking changes

removed property: highlightedButtonTextColor in MDCSnackbarMessage

New deprecations

MDCSnackbarMessage

deprecated property: buttonTextColor in MDCSnackbarMessage

MDCSnackbarMessageView()

modified property: snackbarMessageViewTextColor in MDCSnackbarMessageView()

Type of change:Deprecation message
From:snackbarMessageViewTextColor
To:messsageTextColor

modified property: snackbarMessageViewTextColor in MDCSnackbarMessageView()

Type of change:Deprecation
From:0
To:1

modified property: snackbarMessageViewTextColor in MDCSnackbarMessageView()

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarMessageView
To:c:objc(ext)[email protected]@2959

New features

API changes

Snackbar

MDCSnackbarMessageView

new property: messageTextColor in MDCSnackbarMessageView

new method: -buttonTitleColorForState: in MDCSnackbarMessageView

new property: mdc_adjustsFontForContentSizeCategory in MDCSnackbarMessageView

new method: -setButtonTitleColor:forState: in MDCSnackbarMessageView

MDCSnackbarMessage

new property: usesLegacySnackbar in MDCSnackbarMessage

removed property: highlightedButtonTextColor in MDCSnackbarMessage

removed property: buttonTextColor in MDCSnackbarMessage

MDCSnackbarMessageView()

new method: -snackbarMessageViewTextColor in snackbarMessageViewTextColor in MDCSnackbarMessageView()

new category: MDCSnackbarMessageView()

new method: -setSnackbarMessageViewTextColor: in snackbarMessageViewTextColor in MDCSnackbarMessageView()

modified property: snackbarMessageViewTextColor in MDCSnackbarMessageView()

Type of change:Deprecation message
From:``
To:Use messsageTextColor instead.

modified property: snackbarMessageViewTextColor in MDCSnackbarMessageView()

Type of change:Deprecation
From:0
To:1

modified property: snackbarMessageViewTextColor in MDCSnackbarMessageView()

Type of change:parent.usr
From:c:objc(cs)MDCSnackbarMessageView
To:c:objc(ext)[email protected]@2959

Component changes

Tabs

Changes

FeatureHighlight

Changes

Ink

Changes

Buttons

Changes

TextFields

Changes

Snackbar

Changes

BottomSheet

Changes

Themes

Changes

Palettes

Changes


47.0.0

Breaking changes

Cards

MDCCardCollectionCell

removed property: selectedImageTintColor in MDCCardCollectionCell

removed property: selectedImage in MDCCardCollectionCell

New deprecations

New features

API changes

Cards

MDCCardCollectionCell

new method: -setVerticalImageAlignment:forState: in MDCCardCollectionCell

new method: -setImageTintColor:forState: in MDCCardCollectionCell

new method: -horizontalImageAlignmentForState: in MDCCardCollectionCell

new method: -imageForState: in MDCCardCollectionCell

new method: -imageTintColorForState: in MDCCardCollectionCell

new method: -setImage:forState: in MDCCardCollectionCell

new method: -verticalImageAlignmentForState: in MDCCardCollectionCell

new method: -setHorizontalImageAlignment:forState: in MDCCardCollectionCell

removed property: selectedImageTintColor in MDCCardCollectionCell

removed property: selectedImage in MDCCardCollectionCell

modified class: MDCCardCollectionCell

MDCCardCellVerticalImageAlignment

new enum value: MDCCardCellVerticalImageAlignmentBottom in MDCCardCellVerticalImageAlignment

new typedef: MDCCardCellVerticalImageAlignment

new enum: MDCCardCellVerticalImageAlignment

new enum value: MDCCardCellVerticalImageAlignmentCenter in MDCCardCellVerticalImageAlignment

new enum value: MDCCardCellVerticalImageAlignmentTop in MDCCardCellVerticalImageAlignment

MDCCardCellHorizontalImageAlignment

new enum value: MDCCardCellHorizontalImageAlignmentRight in MDCCardCellHorizontalImageAlignment

new enum value: MDCCardCellHorizontalImageAlignmentCenter in MDCCardCellHorizontalImageAlignment

new typedef: MDCCardCellHorizontalImageAlignment

new enum: MDCCardCellHorizontalImageAlignment

new enum value: MDCCardCellHorizontalImageAlignmentLeft in MDCCardCellHorizontalImageAlignment

Component changes

Tabs

Changes

FeatureHighlight

Changes

Ink

Changes

CollectionCells

Changes

ButtonBar

Changes

TextFields

Changes

Snackbar

Changes

Cards

Changes

NavigationBar

Changes

BottomSheet

Changes

BottomNavigation

Changes

PageControl

Changes

Collections

Changes

Themes

Changes


46.1.1

Component changes

CollectionCells

Changes


46.1.0

API changes

ActivityIndicator

MDCActivityIndicator

new method: -setProgress:animated: in MDCActivityIndicator

Themes

MDCTonalPalette

modified class: MDCTonalPalette

Type of change:Swift declaration
From:class MDCTonalPalette : NSObject, NSCoding, NSCopying
To:class MDCTonalPalette : NSObject, NSCopying, NSSecureCoding

modified class: MDCTonalPalette

Type of change:Declaration
From:@interface MDCTonalPalette : NSObject <NSCoding, NSCopying>
To:@interface MDCTonalPalette : NSObject <NSCopying, NSSecureCoding>

Component changes

Tabs

Changes

MaskedTransition

Changes

FeatureHighlight

Changes

Ink

Changes

CollectionCells

Changes

Buttons

Changes

ButtonBar

Changes

TextFields

Changes

Chips

Changes

Snackbar

Changes

Cards

Changes

BottomAppBar

Changes

NavigationBar

Changes

ShadowLayer

Changes

ActivityIndicator

Changes

BottomSheet

Changes

BottomNavigation

Changes

PageControl

Changes

Collections

Changes

HeaderStackView

Changes

FlexibleHeader

Changes

Themes

Changes


46.0.0

Breaking changes

BottomSheets

Remove Material Motion from the BottomSheets component as it was causing crashes on iOS 8.


45.0.0

API changes

Dialogs

MDCDialogTransition

removed property: dismissOnBackgroundTap in MDCDialogTransition

removed class: MDCDialogTransition

TextFields

MDCTextInputUnderlineView

modified class: MDCTextInputUnderlineView

Type of change:Swift declaration
From:class MDCTextInputUnderlineView : UIView, NSCopying, NSCoding
To:class MDCTextInputUnderlineView : UIView, NSCopying, NSSecureCoding

modified class: MDCTextInputUnderlineView

Type of change:Declaration
From:@interface MDCTextInputUnderlineView : UIView <NSCopying, NSCoding>
To:@interface MDCTextInputUnderlineView : UIView <NSCopying, NSSecureCoding>

MDCTextInputController

modified protocol: MDCTextInputController

Type of change:Swift declaration
From:protocol MDCTextInputController : NSObjectProtocol, NSCoding, NSCopying, MDCTextInputPositioningDelegate
To:protocol MDCTextInputController : NSObjectProtocol, NSSecureCoding, NSCopying, MDCTextInputPositioningDelegate

modified protocol: MDCTextInputController

Type of change:Declaration
From:@protocol MDCTextInputController <NSObject, NSCoding, NSCopying, MDCTextInputPositioningDelegate>
To:@protocol MDCTextInputController <NSObject, NSSecureCoding, NSCopying, MDCTextInputPositioningDelegate>

Component changes

BottomNavigation

Changes

Cards

Changes

Dialogs

Changes

TextFields

Changes


44.6.1

Component changes

MDCIcons

Added extra guard to prevent crash cause by adding nil to a NSCache.


44.6.0

API changes

Cards

New component.

Ink

MDCInkView

new method: -startTouchBeganAtPoint:animated:withCompletion: in MDCInkView

new method: -startTouchEndAtPoint:animated:withCompletion: in MDCInkView

Component changes

AnimationTiming

Changes

BottomSheet

Changes

Cards

Changes

Chips

Changes

Dialogs

Changes

FlexibleHeader

Changes

Ink

Changes

LibraryInfo

Changes

TextFields

Changes

Typography

Changes


44.5.0

API changes

ButtonBar

MDCButtonBarButton

new class: MDCButtonBarButton

Component changes

ButtonBar

Changes

ProgressView

Changes

TextFields

Changes


44.4.0

Breaking changes

New deprecations

New features

API changes

Chips

MDCChipView

new method: -inkColorForState: in MDCChipView

new method: -setInkColor:forState: in MDCChipView

modified class: MDCChipView

modified property: inkColor in MDCChipView

modified property: inkColor in MDCChipView

Snackbar

MDCSnackbarMessageView

new property: buttonFont in MDCSnackbarMessageView

new property: messageFont in MDCSnackbarMessageView

Component changes

Chips

Changes

Snackbar

Changes


44.3.0

API changes

Themes

MDCFontScheme

new property: button in MDCFontScheme

new property: body2 in MDCFontScheme

new property: headline5 in MDCFontScheme

new property: caption in MDCFontScheme

new property: subtitle2 in MDCFontScheme

new property: subtitle1 in MDCFontScheme

new property: body1 in MDCFontScheme

new property: headline1 in MDCFontScheme

new property: overline in MDCFontScheme

new property: headline2 in MDCFontScheme

new property: headline4 in MDCFontScheme

new protocol: MDCFontScheme

new property: headline3 in MDCFontScheme

new property: headline6 in MDCFontScheme

MDCBasicFontScheme

new property: button in MDCBasicFontScheme

new property: headline1 in MDCBasicFontScheme

new property: headline5 in MDCBasicFontScheme

new property: body1 in MDCBasicFontScheme

new property: subtitle2 in MDCBasicFontScheme

new property: headline2 in MDCBasicFontScheme

new property: body2 in MDCBasicFontScheme

new property: overline in MDCBasicFontScheme

new property: headline6 in MDCBasicFontScheme

new property: subtitle1 in MDCBasicFontScheme

new class: MDCBasicFontScheme

new property: headline4 in MDCBasicFontScheme

new property: headline3 in MDCBasicFontScheme

new property: caption in MDCBasicFontScheme

Component changes

FeatureHighlight

Changes

Themes

Changes


44.2.0

API changes

Chips

MDCChipView

new property: titleFont in MDCChipView

ActivityIndicator

Changes

BottomNavigation

Changes

ButtonBar

Changes

Chips

Changes

CollectionCells

Changes

FlexibleHeader

Changes

Typography

Changes


44.1.0

New features

  • MDCSlider supports more UIAppearance customization.
  • MDCActivityIndicator provides improved support for animation transitions.

API changes

ActivityIndicator

MDCActivityIndicatorTransition

new property: duration in MDCActivityIndicatorTransition

new method: -initWithAnimation: in MDCActivityIndicatorTransition

new class: MDCActivityIndicatorTransition

new property: animation in MDCActivityIndicatorTransition

new method: -init in MDCActivityIndicatorTransition

new method: -initWithCoder: in MDCActivityIndicatorTransition

new property: completion in MDCActivityIndicatorTransition

MDCActivityIndicatorAnimation

new typedef: MDCActivityIndicatorAnimation

MDCActivityIndicator

new method: -startAnimatingWithTransition:cycleStartIndex: in MDCActivityIndicator

new method: -stopAnimatingWithTransition: in MDCActivityIndicator

Slider

MDCSlider

new property: thumbRadius in MDCSlider

new property: thumbElevation in MDCSlider

modified property: trackBackgroundColor in MDCSlider

Type of change:Declaration
From:@property(nonatomic, strong, null_resettable) UIColor *trackBackgroundColor
To:@property (readwrite, strong, nonatomic, null_resettable) UIColor *trackBackgroundColor;

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

BottomAppBar

Changes

BottomNavigation

Changes

BottomSheet

Changes

ButtonBar

Changes

Chips

Changes

CollectionCells

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

LibraryInfo

Changes

MaskedTransition

Changes

NavigationBar

Changes

OverlayWindow

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes

Typography

Changes


44.0.0

Breaking changes

Podspec now separates out extensions (themers, accessibility additions, etc.) into their own podspec.

If you wish to add a component and all of its extensions, update your Podfile and add “+Extensions” to the component.

To include Activity Indicator and its extensions you would write:

pod 'MaterialComponents/ActivityIndicator+Extensions'

Component changes

ActivityIndicator

Changes

BottomNavigation

Changes

BottomSheet

Changes

ButtonBar

Changes

Buttons

Changes

Collection Cells

Changes

Collections

Changes

Dialogs

Changes

Feature Highlights

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

PageControl

Changes

ProgressView

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes

Themes

Changes

Typography

Changes

Typography

Changes


43.1.1

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

BottomAppBar

Changes

BottomNavigation

Changes

BottomSheet

Changes

ButtonBar

Changes

Buttons

Changes

Chips

Changes

CollectionCells

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

MaskedTransition

Changes

NavigationBar

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes

Themes

Changes

Typography

Changes


43.1.0

API changes

Buttons

MDCButton

new method: -setTitleFont:forState: in MDCButton

new method: -titleFontForState: in MDCButton

FeatureHighlight

MDCFeatureHighlightView

new property: bodyFont in MDCFeatureHighlightView

new property: titleFont in MDCFeatureHighlightView

Component changes

ActivityIndicator

Changes

AppBar

Changes

BottomAppBar

Changes

BottomNavigation

Changes

ButtonBar

Changes

Buttons

Changes

Chips

Changes

CollectionCells

Changes

Collections

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

LibraryInfo

Changes

MaskedTransition

Changes

NavigationBar

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes


43.0.0

This major release includes a variety of API name changes. Please see the API changes below for more details.

Breaking changes

MDCTextInputControllerDefault has been removed. Use MDCTextInputControllerUnderline instead.

API changes

TextFields

MDCTextInputControllerOutlined

modified class: MDCTextInputControllerOutlined

Type of change:Swift declaration
From:class MDCTextInputControllerOutlined : MDCTextInputControllerDefault
To:class MDCTextInputControllerOutlined : MDCTextInputControllerBase

modified class: MDCTextInputControllerOutlined

Type of change:Declaration
From:@interface MDCTextInputControllerOutlined : MDCTextInputControllerDefault
To:@interface MDCTextInputControllerOutlined : MDCTextInputControllerBase

MDCTextInputControllerOutlinedTextArea

modified class: MDCTextInputControllerOutlinedTextArea

Type of change:Swift declaration
From:class MDCTextInputControllerOutlinedTextArea : MDCTextInputControllerDefault
To:class MDCTextInputControllerOutlinedTextArea : MDCTextInputControllerBase

modified class: MDCTextInputControllerOutlinedTextArea

Type of change:Declaration
From:@interface MDCTextInputControllerOutlinedTextArea : MDCTextInputControllerDefault
To:@interface MDCTextInputControllerOutlinedTextArea : MDCTextInputControllerBase

MDCTextInputControllerBase

new property: expandsOnOverflow in MDCTextInputControllerBase

new property: borderFillColorDefault in MDCTextInputControllerBase

new property: borderFillColor in MDCTextInputControllerBase

new property: minimumLines in MDCTextInputControllerBase

new class: MDCTextInputControllerBase

MDCTextInputControllerDefault

removed property: expandsOnOverflow in MDCTextInputControllerDefault

removed property: borderFillColor in MDCTextInputControllerDefault

removed class: MDCTextInputControllerDefault

removed property: borderFillColorDefault in MDCTextInputControllerDefault

removed property: minimumLines in MDCTextInputControllerDefault

MDCTextInputDefaultUnderlineActiveHeight

removed constant: MDCTextInputDefaultUnderlineActiveHeight

MDCTextInputControllerFilled

modified class: MDCTextInputControllerFilled

Type of change:Swift declaration
From:class MDCTextInputControllerFilled : MDCTextInputControllerDefault
To:class MDCTextInputControllerFilled : MDCTextInputControllerBase

modified class: MDCTextInputControllerFilled

Type of change:Declaration
From:@interface MDCTextInputControllerFilled : MDCTextInputControllerDefault
To:@interface MDCTextInputControllerFilled : MDCTextInputControllerBase

MDCTextInputDefaultBorderRadius

removed constant: MDCTextInputDefaultBorderRadius

MDCTextInputControllerUnderline

new class: MDCTextInputControllerUnderline

MDCTextInputControllerBaseDefaultBorderRadius

new constant: MDCTextInputControllerBaseDefaultBorderRadius

MDCTextInputController

new property: underlineHeightActiveDefault in MDCTextInputController

new property: underlineHeightActive in MDCTextInputController

new property: underlineHeightNormalDefault in MDCTextInputController

new property: underlineHeightNormal in MDCTextInputController

Component changes

TextFields

Changes

Themes

Changes


42.2.0

API changes

Typography

UIFont(MaterialTypography)

new method: -mdc_fontSizedForMaterialTextStyle:scaledForDynamicType: in UIFont(MaterialTypography)

Component changes

ButtonBar

Changes

NavigationBar

Changes

TextFields

Changes

Typography

Changes


42.1.0

New features

New MDCChipField API in the Chips component provides an interface through which a user can input a collection of string tokens.

API changes

Chips

MDCChipFieldDefaultContentEdgeInsets

new constant: MDCChipFieldDefaultContentEdgeInsets

MDCChipFieldDelimiter

new enum value: MDCChipFieldDelimiterReturn in MDCChipFieldDelimiter

new enum: MDCChipFieldDelimiter

new enum value: MDCChipFieldDelimiterAll in MDCChipFieldDelimiter

new enum value: MDCChipFieldDelimiterNone in MDCChipFieldDelimiter

new typedef: MDCChipFieldDelimiter

new enum value: MDCChipFieldDelimiterDefault in MDCChipFieldDelimiter

new enum value: MDCChipFieldDelimiterSpace in MDCChipFieldDelimiter

new enum value: MDCChipFieldDelimiterDidEndEditing in MDCChipFieldDelimiter

MDCChipField

new class: MDCChipField

new method: -focusTextFieldForAccessibility in MDCChipField

new method: -removeSelectedChips in MDCChipField

new method: -removeChip: in MDCChipField

new property: contentEdgeInsets in MDCChipField

new method: -addChip: in MDCChipField

new property: showPlaceholderWithChips in MDCChipField

new property: textField in MDCChipField

new property: minTextFieldWidth in MDCChipField

new property: chipHeight in MDCChipField

new method: -deselectAllChips in MDCChipField

new property: delegate in MDCChipField

new method: -selectChip: in MDCChipField

new property: chips in MDCChipField

new method: -clearTextInput in MDCChipField

new property: delimiter in MDCChipField

MDCChipFieldDelegate

new method: -chipField:didChangeInput: in MDCChipFieldDelegate

new protocol: MDCChipFieldDelegate

new method: -chipFieldHeightDidChange: in MDCChipFieldDelegate

new method: -chipFieldDidBeginEditing: in MDCChipFieldDelegate

new method: -chipField:didRemoveChip: in MDCChipFieldDelegate

new method: -chipField:didTapChip: in MDCChipFieldDelegate

new method: -chipField:shouldAddChip: in MDCChipFieldDelegate

new method: -chipFieldShouldBecomeFirstResponder: in MDCChipFieldDelegate

new method: -chipField:didAddChip: in MDCChipFieldDelegate

new method: -chipFieldShouldReturn: in MDCChipFieldDelegate

new method: -chipFieldDidEndEditing: in MDCChipFieldDelegate

MDCChipView

new property: shapeGenerator in MDCChipView

new method: -shadowColorForState: in MDCChipView

new method: -setShadowColor:forState: in MDCChipView

MDCChipFieldDefaultMinTextFieldWidth

new constant: MDCChipFieldDefaultMinTextFieldWidth

FeatureHighlight

MDCFeatureHighlightView

new property: mdc_adjustsFontForContentSizeCategory in MDCFeatureHighlightView

ShadowLayer

MDCShadowLayer(Subclassing)

new category: MDCShadowLayer(Subclassing)

Typography

UIFontDescriptor(MaterialTypography)

new class method: +mdc_standardFontDescriptorForMaterialTextStyle: in UIFontDescriptor(MaterialTypography)

UIFont(MaterialTypography)

new class method: +mdc_standardFontForMaterialTextStyle: in UIFont(MaterialTypography)

Component changes

AnimationTiming

Changes

AppBar

Changes

BottomAppBar

Changes

BottomNavigation

Changes

BottomSheet

Changes

ButtonBar

Changes

Buttons

Changes

Chips

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

OverlayWindow

Changes

PageControl

Changes

ProgressView

Changes

ShadowLayer

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes

Themes

Changes

Typography

Changes


42.0.0

Breaking changes

MDCFloatingButtonShapeLargeIcon has been removed.

// Old code
MDCFloatingButton *button =
    [MDCFloatingButton floatingButtonWithShape:MDCFloatingButtonShapeLargeIcon];

// New code
MDCFloatingButton *button = [[MDCFloatingButton alloc] init];

New deprecations

BottomSheet has a variety of new deprecations.

New features

MDCFloatingButton has a new mode property and can now be expanded.

MDCInkView has a new delegate-based API for responding to animation events.

It's now possible to customize fonts on Tabs.

API changes

ActivityIndicator

MDCActivityIndicatorDelegate

new method: -activityIndicatorModeTransitionDidFinish: in MDCActivityIndicatorDelegate

BottomSheet

UIViewController(MaterialBottomSheet)

deprecated property: mdc_bottomSheetPresentationController in UIViewController(MaterialBottomSheet). Assign an instance of MDCBottomSheetTransition to your view controller's mdm_transitionController.transition instead.

MDCBottomSheetTransitionController

deprecated class: MDCBottomSheetTransitionController. Assign an instance of MDCBottomSheetTransition to your view controller's mdm_transitionController.transition instead.

MDCBottomSheetPresentationControllerDelegate

deprecated protocol: MDCBottomSheetPresentationControllerDelegate. This API will soon be made private. Use MDCBottomSheetController instead.

MDCBottomSheetPresentationController

deprecated class: MDCBottomSheetPresentationController. This API will soon be made private. Use MDCBottomSheetController instead.

Buttons

MDCFloatingButton

new method: -setMaximumSize: in MDCFloatingButton

new property: imageTitleSpace in MDCFloatingButton

new method: -setContentEdgeInsets: in MDCFloatingButton

new method: -setMinimumSize: in MDCFloatingButton

new property: imageLocation in MDCFloatingButton

new method: -setMinimumSize:forShape:inMode: in MDCFloatingButton

new property: mode in MDCFloatingButton

new method: -setHitAreaInsets:forShape:inMode: in MDCFloatingButton

new method: -setContentEdgeInsets:forShape:inMode: in MDCFloatingButton

new method: -setHitAreaInsets: in MDCFloatingButton

new method: -setMaximumSize:forShape:inMode: in MDCFloatingButton

MDCFloatingButtonMode

new enum value: MDCFloatingButtonModeExpanded in MDCFloatingButtonMode

new enum value: MDCFloatingButtonModeNormal in MDCFloatingButtonMode

new enum: MDCFloatingButtonMode

MDCFloatingButtonShape

removed enum value: MDCFloatingButtonShapeLargeIcon in MDCFloatingButtonShape

MDCFloatingButtonImageLocation

new enum value: MDCFloatingButtonImageLocationLeading in MDCFloatingButtonImageLocation

new typedef: MDCFloatingButtonImageLocation

new enum: MDCFloatingButtonImageLocation

new enum value: MDCFloatingButtonImageLocationTrailing in MDCFloatingButtonImageLocation

Ink

MDCInkView

new property: animationDelegate in MDCInkView

MDCInkViewDelegate

new method: -inkAnimationDidStart: in MDCInkViewDelegate

new method: -inkAnimationDidEnd: in MDCInkViewDelegate

new protocol: MDCInkViewDelegate

Tabs

MDCTabBar

new property: selectedItemTitleFont in MDCTabBar

new property: titleTextTransform in MDCTabBar

new property: unselectedItemTitleFont in MDCTabBar

MDCTabBarTextTransform

new enum: MDCTabBarTextTransform

new enum value: MDCTabBarTextTransformAutomatic in MDCTabBarTextTransform

new typedef: MDCTabBarTextTransform

new enum value: MDCTabBarTextTransformUppercase in MDCTabBarTextTransform

new enum value: MDCTabBarTextTransformNone in MDCTabBarTextTransform

Component changes

ActivityIndicator

Changes

AppBar

Changes

BottomAppBar

Changes

BottomNavigation

Changes

BottomSheet

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

LibraryInfo

Changes

MaskedTransition

Changes

NavigationBar

Changes

PageControl

Changes

ProgressView

Changes

ShadowLayer

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes

Themes

Changes


41.0.0

API changes

Dialogs

new class: MDCDialogTransition.

Ink

breaking changed property signature: MDCInkView's inkColor from null_resettable to nonnull.

new property: usesLegacyInkRipple.

Snackbar

breaking MDCSnackbarMessage's public APIs have all been annotated with nullability annotations.

TextFields

new class: MDCIntrinsicHeightTextView.

changed property signature: MDCMultilineTextField's textView changed from UITextView to MDCIntrinsicHeightTextView.

Component changes

BottomAppBar

Changes

Buttons

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

Ink

Changes

MaskedTransition

Changes

PageControl

Changes

ProgressView

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes

Typography

Changes

40.1.1

Component changes

Tabs

Changes

40.1.0

API Changes

AnimationTiming

  • New enums: MDCAnimationTimingFunctionStandard, MDCAnimationTimingFunctionDeceleration, and MDCAnimationTimingFunctionAcceleration.

BottomSheet

  • New class: MDCBottomSheetTransition.

Tabs

  • New property: -selectionIndicatorTemplate.

  • New class: MDCTabBarIndicatorAttributes.

  • New protocol: MDCTabBarIndicatorContext.

  • New Protocol: MDCTabBarIndicatorTemplate.

  • New class: MDCTabBarUnderlineIndicatorTemplate.

Themes

  • New conformity: MDCColorScheme now conforms to NSObject.

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

BottomAppBar

Changes

BottomNavigation

Changes

BottomSheet

Changes

ButtonBar

Changes

Buttons

Changes

Chips

Changes

CollectionCells

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

LibraryInfo

Changes

MaskedTransition

Changes

NavigationBar

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes

Themes

Changes

Typography

Changes

40.0.3

  • [Chips] Fix private header import (#2434)

40.0.2

  • Fix missing step from 40.0.1: update version numbers throughout library.

40.0.1

  • [Catalog] Added Import to catalog’s AppDelegate.

40.0.0

API Changes

Bottom Sheet

  • Added trackingScrollView property to support better dragging.

Chips (new)

LibraryInfo (new)

  • Added LibraryInfo for accessing information about the MDC library itself.

Tabs

  • Added [MDCTabBar defaultHeightForBarPosition:itemAppearance:].

Text Fields

Component changes

ActivityIndicator

Changes

AppBar

Changes

BottomNavigation

Changes

BottomSheet

Changes

Chips

Changes

Collections

Changes

FlexibleHeader

Changes

LibraryInfo

Changes

MaskedTransition

Changes

PageControl

Changes

ProgressView

Changes

Slider

Changes

Tabs

Changes

TextFields

Changes

Themes

Changes

39.0.0

API Changes

Animation Timing

  • Added the MDCAnimationTimingFunctionSharp timing function from the spec.

Bottom Navigation

  • Added MDCBottomNavigationBarDelegate with controls on selecting items.

Button

  • Added minimumSize and maximumSize properties.

Ink

  • Added injectedInkViewForView convenience function to find an ink view in a view hierarchy.

Slider

  • Added disabledColor property.

Text Fields

  • Added MDCMultilineTextField expandsOnOverflow and placeholder text properties.
  • The MDCTextInput expandsOnOverflow property is no longer IBInspectable.

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

BottomNavigation

Changes

Buttons

Changes

CollectionCells

Changes

FlexibleHeader

Changes

Ink

Changes

MaskedTransition

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

Slider

Changes

TextFields

Changes

38.1.1

No code changes. Added a missing dependency to the BottomNavigation component found after the 38.1.0 release was published.

38.1.0

API Changes

Bottom Navigation

  • New component: Bottom Navigation makes it easy to explore and switch between top-level views in a single tap, similar to a UITabBar.

Text Fields

  • MDCTextInput.cursorColor controls the color of the blinking cursor (in the text).

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

BottomAppBar

Changes

BottomNavigation

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

Collections

Changes

Dialogs

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

MaskedTransition

Changes

NavigationBar

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Tabs

Changes

TextFields

Changes

Typography

Changes

38.0.1

API Changes

None for this release.

Component changes

BottomAppBar

Changes

FlexibleHeader

Changes

TextFields

Changes

38.0.0

API Changes

Navigation Bar

  • (Swift only) titleTextAttributes uses a dictionary with keys of type NSAttributedStringKey instead of NSString * so, for example, .font should be used intead of NSAttributedStringKey.font.rawValue.

Component changes

AppBar

Changes

BottomAppBar

Changes

Collections

Changes

Dialogs

Changes

NavigationBar

Changes

37.0.0

API Changes

Text Fields

  • Added [MDCTextFieldPositioningDelegate textInputDidUpdateConstraints], called after the input's updateConstraints.
  • MDCTextInputControllerDefault's floatingPlaceholderDestination property is replaced with floatingPlaceholderOffset and is a UIOffset, not CGPoint.

Component changes

Buttons

Changes

FlexibleHeader

Changes

PageControl

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes

36.3.0

API Changes

Flexible Header

  • Added minMaxHeightIncludesSafeArea to inform the component if the minimumHeight and maximumHeight properties include the safe area inset.

Component changes

FlexibleHeader

Changes

36.2.0

API Changes

Text fields

  • -[MDCTabBarControllerDelegate tabBarController:shouldSelectViewController:] and -[MDCTabBarControllerDelegate tabBarController:didSelectViewController:] will be called for the currently-selected tab if the user taps the tab again (that is, the tab doesn‘t change). This matches Apple’s behavior more closely and allows for custom behaviors.
  • MDCMultilineTextField now has a MDCMultilineTextInputDelegate for useful methods not included in UITextViewDelegate.

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

BottomAppBar

Changes

BottomSheet

Changes

Dialogs

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

NavigationBar

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes

Themes

Changes

Typography

Changes

36.1.0

API Changes

Text fields

  • Added placeholderText property to control the placeholder text.

Component changes

ActivityIndicator

Changes

Buttons

Changes

Dialogs

Changes

FlexibleHeader

Changes

TextFields

Changes

Themes

Changes

36.0.0

API Changes

Buttons

  • Converted elevation methods to use MDCShadowElevation type insetad of raw CGFloats.

Palettes

  • Palettes require Xcode 8+'s toolchain to compile.

Shadow Elevations

  • Introduced the MDCShadowElevation typedef for shadow elevation values instead of raw CGFloats.

Component changes

ActivityIndicator

Changes

AppBar

Changes

BottomAppBar

Changes

BottomSheet

Changes

Buttons

Changes

CollectionCells

Changes

Collections

Changes

Dialogs

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

NavigationBar

Changes

PageControl

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes

Themes

Changes

Typography

Changes

35.3.0

API Changes

Text Fields

  • New properties on MDCTextInputController:inlinePlaceholderFont, inlinePlaceholderFontDefault, leadingUnderlineLabelFont, leadingUnderlineLabelFontDefault`.
  • New classes MDCTextInputControllerFilled, MDCTextInputControllerOutlined, MDCTextInputControllerOutlinedTextArea.

Component changes

AppBar

Changes

BottomSheet

Changes

Buttons

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

MaskedTransition

Changes

NavigationBar

Changes

Tabs

Changes

TextFields

Changes

35.2.0

API Changes

Bottom App Bar

  • New component: A bottom app bar view with an embedded floating button.

Text Fields

  • MDCTextField.clearButtonMode now supports UIAppearance.

Component changes

BottomAppBar

Changes

Buttons

Changes

FlexibleHeader

Changes

Ink

Changes

NavigationBar

Changes

Tabs

Changes

TextFields

Changes

35.1.0

API Changes

Shadows

  • Added support for colored shadows.

Component changes

Buttons

Changes

Ink

Changes

NavigationBar

Changes

PageControl

Changes

Tabs

Changes

TextFields

Changes

35.0.0

API Changes

PageControl

TextFields

Component changes

BottomSheet

Changes

ButtonBar

Changes

Dialogs

Changes

PageControl

Changes

Snackbar

Changes

TextFields

Changes

Themes

Changes

34.0.2

API Changes

None.

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

MaskedTransition

Changes

NavigationBar

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes

Themes

Changes

Typography

Changes

34.0.1

Hotfix: Fixes Feature Highlight configuration.

Component changes

FeatureHighlight

Changes

34.0.0

API Diffs

AnimationTiming

  • Improved nullibility annotations.

Buttons

  • Added more support for UIAppearance in MDCButton.
  • Added border color and width parameters.

FeatureHighlight

  • Added support for UIContentSize (preferred user font sizes).

TextFields

  • Major update to improved visual styles. For previous version, use the *Legacy* classes.

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

BottomSheet

Changes

ButtonBar

Changes

Buttons

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

Ink

Changes

MaskedTransition

Changes

NavigationBar

Changes

OverlayWindow

Changes

PageControl

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes

Themes

Changes

Typography

Changes

33.0.0

API Diffs

TextFields

Renaming changes in preparation for a new text field style coming soon. No functional or visual changes to the text fields.

  • MDCTextInputControllerDefault was renamed to MDCTextInputControllerLegacyDefault.
  • MDCTextInputControllerFullWidth was renamed to MDCTextInputControllerLegacyFullWidth.

Component changes

ActivityIndicator

Changes

Buttons

Changes

Collections

Changes

Dialogs

Changes

FlexibleHeader

Changes

NavigationBar

Changes

Tabs

Changes

TextFields

Changes

Themes

Changes

32.0.0

API Diffs

Buttons

  • Added larger-icon version of the floating action button.

TextFields

  • Added MDCTextInputController properties activeColor, disabledColor, normalColor, and associated default colors.
  • Removed MDCTextInputController properties underlineColorActive, underlineColorNormal, and associated default colors.
  • Removed MDCTextInputUnderlineView properties disabledUnderline and underline in favor of color and disabledColor.

Component changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

Collections

Changes

FeatureHighlight

Changes

MaskedTransition

Changes

NavigationBar

Changes

OverlayWindow

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes

31.0.2

Hotfix release: fixes autolayout bug involving TextFields height.

Component changes

TextFields

Changes

31.0.1

No changes to code or docs, only updating metadata for generating https://material.io/components/ios/.

31.0.0

API Diffs

TextFields

  • Added MDCMultilineTextField, a Material Design-themed mutiline text field (multiline text input).
  • [MDCTextFieldPositioningDelegate sizeThatFits:defaultSize:] has been removed, see [MDCTextFieldPositioningDelegate textInsets:] instead.
  • Added MDCMultilineTextInput.minimumLines and .expandsOnOverflow properties.

Component changes

Buttons

Changes

CollectionCells

Changes

Collections

Changes

FeatureHighlight

Changes

NavigationBar

Changes

Slider

Changes

TextFields

Changes

30.0.0

API Diffs

Collections

  • Added ‘shouldHideSeparatorForCellLayoutAttributes’ to MDCCollectionViewStyling protocol.
  • Added three methods to MDCCollectionViewStylingDelegate for optionally hiding cell separators.

MaskedTransitioning

  • New component that makes it easy to animate between two view controllers using an expanding mask effect.

TextFields

  • Added ‘leadingView’ and ‘leadingViewMode’ properties to MDCTextField.
  • Renamed MDCTextFieldPositioningDelegate method ‘textContainerInset:’ to ‘textInsets:’
  • Added ‘enabled’, ‘textInsets’, ‘trailingView’ and ‘trailingViewMode’ properties to MDCTextInput.

Typography

  • Changed nullability of ‘lightFontOfSize’, ‘mediumFontOfSize’ and ‘boldItalicFontOfSize’ methods from nonnull to nullable.

Component changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

Ink

Changes

MaskedTransition

Changes

Snackbar

Changes

TextFields

Changes

Themes

Changes

Typography

Changes

29.0.0

  • Reverts changes to the title color of MDCFlatButton and MDCRaisedButton.

28.0.0

API Diffs

AppBar

  • Added MDCAppBarTextColorAccessibilityMutator

Button

  • Marked ‘customTitleColor’ as deprecated.
  • Changed behavior of ‘setTitleColor:forState:’ so that it no longer changes the titleColor if the color was deemed to be of insufficient contrast with the background color.

Icons

  • For each icon in MDCIcons we now have a method that returns a UIImage.

TextFields

  • Removed UI_APPEARANCE_SELECTOR from all controller style properties.
  • Changed all controller style properties from instance to class properties.

Component changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

Ink

Changes

NavigationBar

Changes

PageControl

Changes

TextFields

Changes

27.0.0

API Diffs

Button

  • Removed ‘resetElevationForState’.
  • Removed NS_UNAVAILABLE from ‘setBackgroundColor’.

Component changes

ActivityIndicator

Changes

AppBar

Changes

BottomSheet

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

Ink

Changes

NavigationBar

Changes

PageControl

Changes

ProgressView

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes

Typography

Changes

26.0.0

API diffs

ActivityIndicator

  • Setting ‘cycleColors’ to an empty array now sets ‘cycleColors’ to the default cycle colors.

BottomSheet

  • New component for presenting a view controller as a bottom sheet.

Buttons

  • New subcomponent MDCButtonTitleColorAccessibilityMutator for enforcing title/background color contrast.

Dialogs

  • ‘UIViewController+MaterialDialogs’ property ‘mdc_dialogPresentationController’ now has the nullability annotation of nullable.

TextFields

  • ‘MDCTextInputController’ renamed to ‘MDCTextInputControllerDefault’
  • Added ‘MDCTextInputController’ protocol
  • Removed ‘presentationStyle’ property from MDCTextInputController
  • Added ‘MDCTextInputControllerFullWidth’

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

BottomSheet

Changes

ButtonBar

Changes

Buttons

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

NavigationBar

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes

Themes

Changes

25.1.1

Hotfix: Cherry picked: [Buttons] Call designated initializer in init methods

Component changes

Buttons

Changes

25.1.0

Changes

API diffs

Buttons

  • Added ‘init’ method in MDCFloatingButton

TextFields

  • Added properties ‘underlineColorNormal’, ‘underlineColorActive’,‘errorText’ properties in MDCTextInputController
  • Changed nullabilitity attributes on ‘floatingPlaceholdColor’ & ‘inlinePlaceholderColor’ from nullable to null_resettable
  • Added class ‘MDCTextInputUnderlineView’
  • Added properties ‘disabledUnderline’, ‘underline’, ‘color’, ‘lineHeight’, ‘enabled’ in MDCTextInputUnderlineView
  • Added ‘sizeThatFIts:defaultSize:’ method to MDCTextFieldPositioningDelegate

Component changes

ActivityIndicator

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

OverlayWindow

Changes

PageControl

Changes

ProgressView

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes

Typography

Changes

25.0.1

Hotfix: Added implementation for accessibilityElementForItem: for MDCTabBar

25.0.0

API diffs

FeatureHighlight

  • Added properties ‘bodyColor’ and ‘titleColor’ in MDCFeatureHighlightView
  • Added ‘nullable’ nullability specifiers to ‘innerHighlightColor’, ‘outerHighlightColor’
  • Added properties ‘bodyCOlor’ and ‘titleColor’ in MDCFeatureHighlightViewController

Palettes

  • Remove ‘redPalette’,‘pinkPalette’,‘purplePalette’,‘deepPurplePalette’,‘indigoPalette’,‘bluePalette’, ‘lightBluePalette’,‘cyanPalette’,‘tealPalette’,‘greenPalette’,‘lightGreenPalette’,‘limePalette’, ‘yellowPalette’,‘amberPalette’,‘orangePalette’,‘deepOrangePalette’,‘brownPalette’,‘greyPalette’, ‘blueGreyPalette’ class methods from MDCPalette in favor of class properties

Component changes

FeatureHighlight

Changes

Palettes

Changes

24.0.2

Hotfix: Fixed missing bump of version numbers.

24.0.1

Hotfix: Added missing dependencies in our podspec from ColorThemer subspecs to Component subspecs.

24.0.0

API diffs

Palettes

  • Added typedef for NSString so we can differentiate tints from accents
  • Added more palettes: Red, Pink, Purple etc.

Tabs

  • MDCTabBarDelegate conforms to UIBarPositioningDelegate protocol.
  • Added MDCTabBarViewController.

TextFields

  • New Component: Single line text input.

Themes

  • ColorScheme colors are now nonnull, readonly
  • New classes: TonalColorScheme, TonalPalette

Component changes

ActivityIndicator

Changes

ButtonBar

Changes

Buttons

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

TextFields

Changes

Themes

Changes

Typography

Changes

23.4.1

Fixed podspec

Component changes

Buttons

Changes

Typography

Changes

23.4.0

API diffs

FeatureHighlight

Made MDCFeatureHighlightView public with two properties: innerHighlightColor and outerHighlightColor.

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

Themes

Changes

Typography

Changes

23.3.0

API diffs

  • No API changes.

Component changes

FlexibleHeader

Changes

23.2.0

API diffs

  • No API changes.

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

OverlayWindow

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

Typography

Changes

23.1.0

API diffs

Collections

Changes

Make [MDCCollectionViewController cellWidthAtSectionIndex:] public.

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

OverlayWindow

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

Typography

Changes

23.0.2

API diffs

No change in public APIs.

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

OverlayWindow

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

Typography

Changes

23.0.1

API diffs

No change in public APIs.

Component changes

Component changes

AppBar

Changes

Buttons

Changes

CollectionCells

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

Ink

Changes

NavigationBar

Changes

Snackbar

Changes

Tabs

Changes

Typography

Changes

23.0.0

API diffs

CollectionCell

Changes

  • Add kSelectedCellAccessibilityHintKey

  • Add kDeselectedCellAccessibilityHintKey

Collections

Changes

  • Change [MDCCollectionViewStyling backgroundImageForCellLayoutAttributes] nullability

Ink

Changes

  • Change [MDCInkTouchController inkTouchController] nullability

Typography

Changes

  • Add [MDCTypography boldItalicFontOfSize:]

  • Add [MDCTypography boldFontFromFont:]

  • Add [MDCTypography italicFontFromFont:]

  • Add [MDCTypography isLargeForContrastRatios]

Component changes

CollectionCells

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

FlexibleHeader

Changes

Ink

Changes

Snackbar

Changes

Typography

Changes

22.1.1

Component changes

Flexible Header

Changes

22.1.0

API diffs

Typography

Changes

Component changes

NavigationBar

Changes

Typography

Changes

22.0.0

API diffs

Dialogs

Changes

Typography

Changes

Component changes

AppBar

Changes

Buttons

Changes

Dialogs

Changes

Snackbar

Changes

Typography

Changes

21.3.0

API diffs

Buttons

Component changes

AppBar

Changes

Buttons

Changes

Collections

Changes

NavigationBar

Changes

Snackbar

Changes

Tabs

Changes

Typography

Changes

21.2.0

API diffs

NavigationBar

Component changes

CollectionCells

Changes

Ink

Changes

NavigationBar

Changes

Typography

Changes

21.1.0

Component changes

Buttons

Changes

21.0.1

Fixed podspec so it passes lint.

21.0.0

API diffs

Minimum iOS version is now 8.0

Given the usage of clients on versions of iOS below 8.0 and the increased power of the APIs available to us on iOS 8, our minimum iOS version is bumped from iOS 7 to 8.

New component: Tabs

Tab component with MDCTabBar (#1164) is an implementation of the Material tabs used to explore and switch between different views. Try tabs out! (Brian Moore with Will Larche)

Typography

Component changes

ButtonBar

Changes

Buttons

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

NavigationBar

Changes

Slider

Changes

Snackbar

Changes

Tabs

Changes

Typography

Changes

20.1.1

Component changes

Snackbar

Changes

20.1.0

API diffs

Snackbar

  • Message View Styling

Component changes

AppBar

Changes

Buttons

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

PageControl

Changes

Palettes

Changes

ShadowLayer

Changes

Snackbar

Changes

20.0.0

API changes

Ink

  • Return value of -[MDCInkTouchController initWithView:] changed from nullable instancetype to nonnull instancetype.

ProgressView

  • Added MDCProgressViewBackwardAnimationMode enumeration and -[MDCProgressView backwardProgressAnimationMode] to control how the progress view acts when its progress value is set to a smaller value than the current value.

Component changes

ActivityIndicator

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

OverlayWindow

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

Typography

Changes

19.0.4

This point release changes certain podfiles and instructions to refer to the published pod up at CocoaPods.

19.0.3

This point release removes the examples from private/ThumbTrack; they didn't follow our normal conventions and was confusing pod try.

API changes

  • No API changes in this release.

Component changes

  • No component changes in this release.

19.0.2

API changes

  • No API changes in this release.

Component changes

ActivityIndicator

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

Typography

Changes

19.0.1

This point release fixes stale references to MDFFontDiskLoader, MDFSpritedAnimationView, and MDFRobotoFontLoader in our CocoaPods podspec.

API diffs

None.

Component changes

Typography

Changes

19.0.0

API diffs

The following components have been refactored out of MDC into their own repos:

Please note that while MDC's repo is private, there is no way for MDFRobotoFontLoader to formally depend on MDCTypographyFontLoading, even though it informally implements the protocol. This means that MDFRobotoFontLoader can't be used out of the box to configure Typography with Roboto. Once we go public, a pull request to MDFFontDiskLoader will be created to add this convenience. Until that time, you can manually extend your local copy of MDFRobotoFontLoader to declare that it implements MDCTypographyFontLoading.

ShadowLayer

MDCShadowLayer

modified property: shadowMaskEnabled in MDCShadowLayer

Type of change:declaration
From:@property (assign, readwrite, nonatomic) BOOL shadowMaskEnabled;
To:@property (getter=isShadowMaskEnabled, assign, readwrite, nonatomic) BOOL shadowMaskEnabled;

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

OverlayWindow

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

Typography

Changes

18.0.0

API diffs

ButtonBar

  • MDCButtonBar is now IB_DESIGNABLE.

MDCButtonBarDelegate

modified method: -buttonBar:viewForItem:layoutHints: in MDCButtonBarDelegate

Type of change:swift declaration
From:func buttonBar(_ buttonBar: MDCButtonBar!, viewForItem barButtonItem: Any!, layoutHints: Any!) -> Any!
To:func buttonBar(_ buttonBar: MDCButtonBar, viewForItem barButtonItem: Any!, layoutHints: Any!) -> Any!

modified method: -buttonBar:viewForItem:layoutHints: in MDCButtonBarDelegate

Type of change:declaration
From:- (UIView *)buttonBar:(MDCButtonBar *)buttonBar viewForItem:(UIBarButtonItem *)barButtonItem layoutHints:(MDCBarButtonItemLayoutHints)layoutHints;
To:- (nonnull UIView *)buttonBar:(nonnull MDCButtonBar *)buttonBar viewForItem:(nonnull UIBarButtonItem *)barButtonItem layoutHints:(MDCBarButtonItemLayoutHints)layoutHints;

MDCButtonBar

modified property: items in MDCButtonBar

Type of change:declaration
From:@property (readwrite, copy, nonatomic) NSArray<UIBarButtonItem *> *items;
To:@property (readwrite, copy, nonatomic, nullable) NSArray<UIBarButtonItem *> *items;

FlexibleHeader

MDCFlexibleHeaderViewController

new method: -updateTopLayoutGuide in MDCFlexibleHeaderViewController

FontDiskLoader

MDCFontDiskLoader

modified class: MDCFontDiskLoader

Type of change:key.deprecation_message
From:``
To:Use https://github.com/material-foundation/material-font-disk-loader-ios instead.

modified class: MDCFontDiskLoader

Type of change:key.always_deprecated
From:0
To:1

HeaderStackView

  • MDCHeaderStackView is now IB_DESIGNABLE.

RobotoFontLoader

MDCRobotoFontLoader

modified class: MDCRobotoFontLoader

Type of change:key.deprecation_message
From:``
To:Use https://github.com/material-foundation/material-roboto-font-loader-ios instead.

modified class: MDCRobotoFontLoader

Type of change:key.always_deprecated
From:0
To:1

SpritedAnimationView

MDCSpritedAnimationView

modified class: MDCSpritedAnimationView

Type of change:key.deprecation_message
From:``
To:Use https://github.com/material-foundation/material-sprited-animation-view-ios instead.

modified class: MDCSpritedAnimationView

Type of change:key.always_deprecated
From:0
To:1

Switch

  • MDCSwitch has been removed, please use UISwitch instead.

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

FontDiskLoader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

RobotoFontLoader

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

SpritedAnimationView

Changes

Typography

Changes

17.2.0

API Changes

FlexibleHeader

  • MDCFlexibleHeaderView is now marked IB_DESIGNABLE.

Switch

  • MDCSwitch is completely deprecated and will be removed in the next release. We recommend apps use UISwitch instead.

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

FontDiskLoader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

OverlayWindow

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

RobotoFontLoader

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

SpritedAnimationView

Changes

Switch

Changes

Typography

Changes

17.1.1

No public API or component changes.

Added missing components/private/Application/src/MaterialApplication.h umbrella header.

17.1.0

API diffs

No public API changes in this release. Note that the 17.0.0 release was not published to CocoaPods, so if you are updating from 16.3.0 you will see the breaking change from 17.0.0.

Behavior changes in MDCSnackbar

The behavior of MDCSnackbar has been changed to better match the spec:

  • Animation duration increased from 0.15s to 0.5s.
  • The snackbar no longer fades out, but translates down off screen.
  • The snackbar's text and button (but not the background) fade out during the animation.

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

Dialogs

Changes

FeatureHighlight

Changes

FlexibleHeader

Changes

FontDiskLoader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

OverlayWindow

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

RobotoFontLoader

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

SpritedAnimationView

Changes

Switch

Changes

Typography

Changes

17.0.0

API Diffs

Buttons

MDCButton

modified method: -setBackgroundColor: in MDCButton

Type of change:key.deprecation_message
From:Use setBackgroundColor:forState: instead.
To:

modified method: -setBackgroundColor: in MDCButton

Type of change:key.always_unavailable
From:0
To:1

modified method: -setBackgroundColor: in MDCButton

Type of change:key.always_deprecated
From:1
To:0

modified method: -setBackgroundColor: in MDCButton

Type of change:declaration
From:- (void)setBackgroundColor:(nullable UIColor *)backgroundColor __deprecated_msg("Use setBackgroundColor:forState: instead.");
To:- (void)setBackgroundColor:(nullable UIColor *)backgroundColor;

CollectionCells

MDCCollectionViewCell

new property: editingSelectorColor in MDCCollectionViewCell

Component changes

Buttons

Changes

CollectionCells

Changes

16.3.0

API diffs

Snackbar

Component changes

CollectionCells

Changes

Collections

Changes

FeatureHighlight

Changes

Snackbar

Changes

16.2.0

API diffs

FeatureHighlight

  • FeatureHighlight is a new component that lets you highlight a particular feature of your interface to the user.

Component changes

AppBar

Changes

CollectionCells

Changes

Collections

Changes

FeatureHighlight

Changes

NavigationBar

Changes

Switch

Changes

16.1.0

Component changes

ActivityIndicator

Changes

Buttons

Changes

Dialogs

Changes

Ink

Changes

ProgressView

Changes

Snackbar

Changes

16.0.0

API diffs

InkTouchController

Component changes

AppBar

Changes

Dialogs

Changes

Ink

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Switch

Changes

15.2.0

API diffs

Palettes

Component changes

FlexibleHeader

Changes

Ink

Changes

NavigationBar

Changes

Palettes

Changes

15.1.0

API diffs

Auto-generated by running:

scripts/api_diff -o 203562553800ed3d3b5eebfd1dd76cda875d833c -n f8e2c8b5e87d0414f6b08f691949ecebfaca41b8

Ink

NavigationBar

Component changes

ButtonBar

Changes

CollectionCells

Changes

Collections

Changes

Ink

Changes

NavigationBar

Breaking changes

15.0.0

API diffs

Auto-generated by running:

scripts/api_diff -o 1926458f491c928adfb573a6eda38b6d5b5bc55e -n c39811a2344114302327b6fa64d86346bacbea9a

Dialogs

Ink

NavigationBar

Switch

  • [protocols changed] MDCSwitch. Removed NSCoding. Added NSSecureCoding.

Component changes

Collections

Changes

Dialogs

Changes

Ink

Changes

NavigationBar

Changes

Slider

Changes

Snackbar

Changes

Switch

Changes

14.0.0

API diffs

Auto-generated by running:

scripts/api_diff -o 52692216832dc446ae2471bd2f42a40cd8746bbe -n 9ecf191c8d5fa6d8afc7ba119f4cb0ebe926483c

FontDiskLoader

Component changes

Buttons

Changes

Collections

Changes

FlexibleHeader

Changes

FontDiskLoader

Breaking changes

Ink

Changes

Palettes

Changes

ProgressView

Changes

RobotoFontLoader

Changes

ShadowLayer

Changes

Switch

Changes

13.4.0

API diffs

Auto-generated by running:

scripts/api_diff -o fb77a9716a80ba4ee2a9f92a81a89335570366e3 -n 8fa99ffb150b99597f19783d54203ff77a4219d2

FontDiskLoader

Component changes

AppBar

Changes

Dialogs

Changes

FontDiskLoader

Changes

Ink

Changes

Slider

Changes

Switch

Changes

13.3.0

API diffs

Auto-generated by running:

scripts/api_diff -o 51fbbacdf98a1f086cdbf6210f849c8133e91183 -n dd3d2622f6935e70854d3ccb72677b09e19e045a

FontDiskLoader

@property (nonatomic, strong, nonnull) NSString *fontName
- (void)setFontName:(nonnull NSString *)fontName

RobotoFontLoader

+ (nonnull instancetype)sharedInstance
+ (nonnull MDCRobotoFontLoader *)sharedInstance

Component changes

ActivityIndicator

Changes

Buttons

Changes

CollectionLayoutAttributes

Changes

Dialogs

Changes

FlexibleHeader

Changes

FontDiskLoader

Changes

RobotoFontLoader

Changes

Slider

Changes

Typography

Changes

13.2.1

API diffs

Icons

Component changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

Dialogs

Changes

FlexibleHeader

Changes

FontDiskLoader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

RobotoFontLoader

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

Switch

Changes

Typography

Changes

13.2.0

API diffs

Auto-generated by running:

scripts/api_diff -o 6b00b97156fcd8ed5a661c736df6b363cf4c8457 -n 9ef47c149996f078e5f6a4ed3474688e187ab573

Slider

SpritedAnimationView

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

Dialogs

Changes

FlexibleHeader

Changes

FontDiskLoader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

OverlayWindow

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

RobotoFontLoader

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

SpritedAnimationView

Changes

Switch

Changes

Typography

Changes

13.1.1

Component changes

Snackbar

Changes

13.1.0

API diffs

Auto-generated by running:

scripts/api_diff -o 5d7ad466b9e1429ad6242272958b149ded34da63 -n 205b1b49fd311af9246133e1499007dec0957e4b

AnimationTiming

New component.

Switch

Component changes

ActivityIndicator

Changes

AnimationTiming

Changes

AppBar

Changes

Buttons

Changes

CollectionCells

Changes

Dialogs

Changes

FlexibleHeader

Changes

NavigationBar

Changes

OverlayWindow

Changes

PageControl

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

Switch

Changes

13.0.2

API diffs

Auto-generated by running:

scripts/api_diff -o 313365e03bc6f74f43910264ee31d1e2721db36b -n e66a70dc0cd3bb40eb0f4ff3d5867bafba20db3a

No public API changes detected.

Component changes

ActivityIndicator

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

Dialogs

Changes

FlexibleHeader

Changes

FontDiskLoader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

OverlayWindow

Changes

PageControl

Changes

Palettes

Changes

ProgressView

Changes

RobotoFontLoader

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

SpritedAnimationView

Changes

Switch

Changes

Typography

Changes

13.0.1

Hotfix for Xcode 8.0 beta 3 (8S174q) compilation.

API diffs

Auto-generated by running:

scripts/api_diff -o 50ed805a58529c8cd3a0bfe56a9b99937134ad2c -n e8dbfebbb20f3d1314b5396e6cc1f76f9d23beb2

No public API changes detected.

Component changes

Collections

Changes

ProgressView

Changes

Snackbar

Changes

SpritedAnimationView

Changes

13.0.0

API diffs

Auto-generated by running:

scripts/api_diff -o 0c7bda2e69db44668360b89e3403a7ad9e16c3aa -n 10e4a258fa529178d1aa6ae8962193eb18b43d20

Dialogs

SpritedAnimationView

- (void)startAnimatingWithCompletion:(nullable void (^)())completion
- (void)startAnimatingWithCompletion:(nullable void (^)(BOOL))completion

Component changes

ActivityIndicator

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

Dialogs

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

PageControl

Changes

ProgressView

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

SpritedAnimationView

Breaking changes

Changes

Switch

Changes

Typography

Changes

12.2.0

API diffs

Auto-generated by running:

scripts/api_diff -o c6523eae8e811b1c89d94073b9153a03390b1950 -n edab0db4908985cd0b56003b4341d5f064f98d6a

Dialogs

New component.

Component changes

Dialogs

Changes

Ink

Changes

ProgressView

Changes

Slider

Changes

Snackbar

Changes

12.1.1

API diffs

Auto-generated by running:

scripts/api_diff -o ec923edf948c5c0ef8cef52f3a3b26a21cbf29d9 -n 34f12cf42f45e30bada83ff6c4c67d5104201a00

No public API changes detected.

Component changes

SpritedAnimationView

Changes

12.1.0

API diffs

NavigationBar

ProgressView

New component.

Component changes

ActivityIndicator

Changes

Collections

Changes

Ink

Changes

NavigationBar

Changes

OverlayWindow

Changes

Palettes

Changes

ProgressView

Changes

Snackbar

Changes

12.0.1

API diffs

Auto-generated by running:

scripts/api_diff -o bdc034da8700a9cbd6064823dc045b511d622f8c -n f9f6d8e87d6cdaf884ac2d3ad462403bdb2fd008

No public API changes detected.

Component changes

CollectionCells

Changes

Slider

Changes

Snackbar

Changes

12.0.0

API diffs

Auto-generated by running:

scripts/api_diff -o e4b240934cbf7211790e0929c73652dbd7c2f46f -n 55a289f0cfeebdc10931243d613d4cf5bcef3986

ActivityIndicator

FromToKind
RequiredOptionaloptional

ButtonBar

FromToKind
@property (nonatomic, copy) NSArray *items@property (nonatomic, copy) NSArray<UIBarButtonItem *> *itemsdeclaration

Collections

- (nullable NSArray *)indexPathsForInlaidItems
- (nullable NSArray<NSIndexPath *> *)indexPathsForInlaidItems

NavigationBar

FromToKind
@property (nonatomic, copy, nullable) NSArray *leadingBarButtonItems@property (nonatomic, copy, nullable) NSArray<UIBarButtonItem *> *leadingBarButtonItemsdeclaration
FromToKind
@property (nonatomic, copy, nullable) NSArray *leftBarButtonItems@property (nonatomic, copy, nullable) NSArray<UIBarButtonItem *> *leftBarButtonItemsdeclaration
FromToKind
@property (nonatomic, copy, nullable) NSArray *rightBarButtonItems@property (nonatomic, copy, nullable) NSArray<UIBarButtonItem *> *rightBarButtonItemsdeclaration
FromToKind
@property (nonatomic, copy, nullable) NSArray *trailingBarButtonItems@property (nonatomic, copy, nullable) NSArray<UIBarButtonItem *> *trailingBarButtonItemsdeclaration
FromToKind
@property (nonatomic, copy, nullable) NSArray *leftBarButtonItems@property (nonatomic, copy, nullable) NSArray<UIBarButtonItem *> *leftBarButtonItemsdeclaration
FromToKind
@property (nonatomic, copy, nullable) NSArray *rightBarButtonItems@property (nonatomic, copy, nullable) NSArray<UIBarButtonItem *> *rightBarButtonItemsdeclaration

OverlayWindow

New component.

Snackbar

New component.

Component changes

ActivityIndicator

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

Collections

Changes

FlexibleHeader

Changes

Ink

Changes

NavigationBar

Changes

OverlayWindow

Changes

PageControl

Changes

Palettes

Changes

ShadowLayer

Changes

Slider

Changes

Snackbar

Changes

SpritedAnimationView

Changes

11.0.1

API diffs

Auto-generated by running:

scripts/api_diff -o 5cea05817470a3fd906dc3663aff5628491e3224 -n 914490127624d9526f24a497021efffddcf3d567

No public API changes detected.

Component changes

ButtonBar

Changes

FontDiskLoader

Changes

Slider

Changes

Switch

Changes

11.0.0

API diffs

Auto-generated by running:

scripts/api_diff -o a33f87199b2f4e29e35f0b93c75d60520742d5aa -n 0b277c9ff00628400b291d2e6900ff6389b27ecf

FontDiskLoader

Palettes

Component changes

ActivityIndicator

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

FlexibleHeader

Changes

FontDiskLoader

Breaking changes

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

PageControl

Changes

Palettes

Changes

RobotoFontLoader

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

SpritedAnimationView

Changes

Switch

Changes

Typography

Changes

10.1.2

Changes

10.1.1

FontDiskLoader

Changes

10.1.0

API diffs

Auto-generated by running:

scripts/api_diff -o dc74cd290f327e950eab32b48f3105c55972fad9 -n d4a3ac376f5c8498cfb52401f4fbb69d2e318897

ActivityIndicator

New component.

FontDiskLoader

Added NSCopying.

Component changes

ActivityIndicator

Changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

Collections

Changes

FontDiskLoader

Changes

PageControl

Changes

RobotoFontLoader

Changes

ShadowLayer

Changes

Switch

Changes

10.0.0

Infrastructure

Material Components for iOS now requires Cocoapods 1.0.0.

API diffs

Auto-generated by running:

scripts/api_diff -o 0c97c7e25888d9da312c8610e21aa635cf9fb395 -n 1fc92b09a8539cf235667c4b2fb83c0f52578d65

RobotoFontLoader

9.0.0

API diffs

Auto-generated by running:

scripts/api_diff -o cdbe7e499d85c320c41f31e51cd7cf29c3afed48 -n 636df09ea57a7cdefdacad3f53277c76df968f72

ButtonBar

NavigationBar

Component changes

ButtonBar

Changes

CollectionCells

Changes

Collections

Changes

FlexibleHeader

Changes

FontDiskLoader

Changes

HeaderStackView

Changes

NavigationBar

Changes

8.0.0

API diffs

Auto-generated by running the following while checked out at 4bc99e8ad0fe0ac7e9acc044591a8581165fb5c2:

scripts/api_diff -o 2153f8fa453ecec4dfe48a328e331846d5d37aac -n bbabb375953fbd01c3f818ac9092b55fe56dd9b9

AppBar

ButtonBar

NavigationBar

Component changes

AppBar

Breaking changes

ButtonBar

Breaking changes

Changes

CollectionCells

Changes

Collections

Changes

NavigationBar

Breaking changes

7.0.0

API diffs

Auto-generated by running:

scripts/api_diff -o d2f436fdcfa711da5a8a077b42feb052c1abdf9e -n 6c8ca274056aed6850920f6010b47655c67730c9

AppBar

ButtonBar

Collections

FromToKind
- (void)collectionView:(nonnull UICollectionView *)collectionView didDeleteItemsAtIndexPaths:(nonnull NSArray *)indexPaths- (void)collectionView:(nonnull UICollectionView *)collectionView didDeleteItemsAtIndexPaths:(nonnull NSArray<NSIndexPath *> *)indexPathsdeclaration
FromToKind
- (void)collectionView:(nonnull UICollectionView *)collectionView willDeleteItemsAtIndexPaths:(nonnull NSArray *)indexPaths- (void)collectionView:(nonnull UICollectionView *)collectionView willDeleteItemsAtIndexPaths:(nonnull NSArray<NSIndexPath *> *)indexPathsdeclaration
FromToKind
- (void)collectionView:(nonnull UICollectionView *)collectionView didApplyInlayToItemAtIndexPaths:(nonnull NSArray *)indexPaths- (void)collectionView:(nonnull UICollectionView *)collectionView didApplyInlayToItemAtIndexPaths:(nonnull NSArray<NSIndexPath *> *)indexPathsdeclaration
FromToKind
- (void)collectionView:(nonnull UICollectionView *)collectionView didRemoveInlayFromItemAtIndexPaths:(nonnull NSArray *)indexPaths- (void)collectionView:(nonnull UICollectionView *)collectionView didRemoveInlayFromItemAtIndexPaths:(nonnull NSArray<NSIndexPath *> *)indexPathsdeclaration

Palettes

New component.

Component changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

Collections

Breaking changes

Changes

FlexibleHeader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Breaking changes

Changes

PageControl

Changes

Palettes

Changes

RobotoFontLoader

Changes

ShadowLayer

Changes

Slider

Changes

Switch

Changes

Typography

Changes

6.0.0

API diffs

Auto-generated by running:

scripts/api_diff -o da19cc89a5bb91c94480aee818d2f0ac52410e1c -n bac6ea73c709e95ac88f202ca6c02e1ab88e91f5

CollectionLayoutAttributes

Switch

Typography

Component changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

FlexibleHeader

Changes

FontDiskLoader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

PageControl

Changes

RobotoFontLoader

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

Switch

Changes

Typography

Breaking changes

Changes

5.1.0

API diffs

Auto-generated by running:

scripts/api_diff -o 037551fa3b17c25f6546d290e41f747e3713bc4f -n 4b6b0a414e599af1fe3a29bba66af8e04ba67b4d

No public API changes.

Component changes

AppBar

Changes

ButtonBar

Changes

Buttons

Changes

CollectionCells

Changes

CollectionLayoutAttributes

Changes

Collections

Changes

FlexibleHeader

Changes

FontDiskLoader

Changes

HeaderStackView

Changes

Ink

Changes

NavigationBar

Changes

PageControl

Changes

RobotoFontLoader

Changes

ShadowElevations

Changes

ShadowLayer

Changes

Slider

Changes

SpritedAnimationView

Changes

Switch

Changes

Typography

Changes

5.0.0

API diffs

Auto-generated by running:

scripts/api_diff -o 55afa3aaef67799bdb8a94881f31c5c3b242e9a6 -n fe1ac2f14b7ad4179c84b01590df9c93289f2e36

CollectionCells

New component.

CollectionLayoutAttributes

New component.

Collections

New component.

FlexibleHeader

PageControl

Component changes

AppBar

ButtonBar

Buttons

CollectionCells

CollectionLayoutAttributes

Collections

FlexibleHeader

FontDiskLoader

HeaderStackView

Ink

NavigationBar

PageControl

RobotoFontLoader

ShadowElevations

ShadowLayer

Slider

SpritedAnimationView

Switch

Typography

4.0.1

API diffs

Auto-generated by running:

scripts/api_diff -o 1542251633905c3c2089b38f1c01a5010a8894f1 -n 789beeb556aab8b4aeddb71fa837d7db8c4660d7

Typography

Component changes

Typography

4.0.0

API diffs

Auto-generated by running:

scripts/api_diff -o 11959487eb429c37b382c521a1c469eac96ed0da -n 7cc87bd6d90ed2c641212339f00f67b08fb76314

Buttons

FlexibleHeader

Ink

RobotoFontLoader

ScrollViewDelegateMultiplexer

Component changes

AppBar

ButtonBar

Buttons

FlexibleHeader

FontDiskLoader

HeaderStackView

Ink

NavigationBar

PageControl

RobotoFontLoader

ScrollViewDelegateMultiplexer

ShadowElevations

ShadowLayer

Slider

SpritedAnimationView

Switch

Typography

3.1.0

API diffs

Auto-generated by running:

scripts/api_diff -o ddb35150fe10c2974b63d1e29c4ecce4ccaa51fb -n ad904b8748ce469af886b2f27172d8e3c44928e8

AppBar

ButtonBar

Buttons

FlexibleHeader

RobotoFontLoader

Typography

Component changes

AppBar

ButtonBar

Buttons

FlexibleHeader

HeaderStackView

Ink

NavigationBar

PageControl

RobotoFontLoader

ScrollViewDelegateMultiplexer

ShadowElevations

ShadowLayer

Slider

SpritedAnimationView

Switch

Typography

3.0.0

Breaking
  • [FlexibleHeader] contentView is now nonnull and readonly. (Jeff Verkoeyen)
    • Swift code will need to change contentView! to contentView. This will be made apparent at build time.
Enhancements
  • [ButtonBar] Rename buttonItems API to items. (Jeff Verkoeyen)
  • [ButtonBar] Add Buttons dependency and remove Buttons dependency from AppBar. (Jeff Verkoeyen)
  • [Site] Adding excerpts to component docs metadata. (Jason Striegel)
  • [RobotoFontLoader] Removed #define that should not have made it public. (randallli)
  • [Demos] Fix compilation errors for Xcode 7.2 (Junius Gunaratne)
  • [Cleanup] Replaced [Foo new] with [[Foo alloc] init], per the style guide. (Adrian Secord)
  • [checks] Add missing_readme check and check_all runner. (Jeff Verkoeyen)
  • [ButtonBar] Deprecating all ButtonBar delegate-related APIs. (Jeff Verkoeyen)
  • [AppBar] Don‘t set the bar buttons’ title color. (Jeff Verkoeyen)
  • [Ink] Update demo so ink is not obstructed by adjacent views (Junius Gunaratne)
  • [Switch] Rename commonInit to avoid name collisions (Ian Gordon)
  • [Slider] Rename commonInit to avoid name collisions (Ian Gordon)
  • [Site] Including component README screenshots. (Jason Striegel)
  • [Ink] Use custom ink center property in ink implementation (Junius Gunaratne)
  • [AppBar] Implement the App Bar container's header view setter. (Jeff Verkoeyen)
  • [Shrine] Add launch screen (Junius Gunaratne)
  • [Catalog] Fix build breakage. (Jeff Verkoeyen)
  • [Documentation] Initial draft of the Material Components Getting Started guide (Alastair Tse)
  • [Documentation] Adding component screenshots from catalog for website (Junius Gunaratne)
  • [Site] Created ROADMAP.md (Katy Kasmai)
  • [AppBar] Add README section on interacting with background views. (Jeff Verkoeyen)
  • [Catalog] Add exit bar for demos (Junius Gunaratne)
  • [Shrine] Fix compiler errors (Junius Gunaratne)
  • [AppBar|FlexibleHeader] Add section on touch forwarding. (Jeff Verkoeyen)
  • [FlexibleHeader] Clarify that touch forwarding does not apply to subviews. (Jeff Verkoeyen)
  • [AppBar] Call out the content view in the view hierarchy. (Jeff Verkoeyen)
  • [NavigationBar] Add nullability annotations. (Jeff Verkoeyen)
  • [Documentation] Fixed pod install instructions for Buttons/README.md. (Adrian Secord)
  • [AppBar] Remove excess horizontal rules. (Jeff Verkoeyen)
  • [AppBar|FlexibleHeader] Move UINav section from App Bar to Flexible Header. (Jeff Verkoeyen)
  • [AppBar|FlexibleHeader] Move section on status bar style from App Bar to Flexible Header. (Jeff Verkoeyen)
  • [NavigationBar] Document that the navigationBar's state syncs with navigationItem on observation. (Jeff Verkoeyen)
  • [NavigationBar] Rename MDCUINavigationItemKVO to MDCUINavigationItemObservables. (Jeff Verkoeyen)
  • [AppBar|NavigationBar] Minor typos in navigation item section title. (Jeff Verkoeyen)
  • [CONTRIBUTING] Fix typo. (Jeff Verkoeyen)
  • [CONTRIBUTING] Cleaning up the checklist. (Jeff Verkoeyen)
  • [AppBar] No longer need to unwrap contentView in the imagery example. (Jeff Verkoeyen)
  • [Animated Menu Button] Double/float correction. (Will Larche)
  • [Demos] Pesto detail presentation and dismissal. (Will Larche)
  • [AppBar|NavigationBar] Added section on observing UINavigationItem. (Jeff Verkoeyen)
  • [AppBar] Minor grammatical rearrangements in README. (Jeff Verkoeyen)
  • [FlexibleHeader] Explain what the imagery usage example section is. (Jeff Verkoeyen)
  • [NavigationBar] Adding more specific documentation. (Jeff Verkoeyen)
  • [Docs] Cleanup pass for Markdown style (100 chars). (Adrian Secord)
  • [Sample] Pesto: Marking target ‘Requires Full Screen’ (Will Larche)
  • [community] Change Stack Overflow tag to ‘material-components-ios’. (Jeff Verkoeyen)
  • [AppBar] Replace iOS 9 APIs with older APIs. (Jeff Verkoeyen)
  • [AppBar] Add imagery example. (Jeff Verkoeyen)
  • [Demos] Pesto: Adding AppBar to Settings (Will Larche)
  • [Typography] Corrections to markdown in readme.md (Will Larche)
  • [Typography ReadMe] First pass at updated content (Will Larche)
  • [Site] Add option hint to build-site.sh (Yiran Mao)
  • [Testing] Naming consistency for unit tests. (Jeff Verkoeyen)
  • [Other] Remove old @ingroup document annotations. (Adrian Secord)
  • [ThumbTrack] Add Ink as a dependency (Ian Gordon)
  • [MDCButton] Documentation updates (Ian Gordon)
  • [Site] Update code snippet markdown h3 to h4 and corresponding css styles (Yiran Mao)
  • [Testing] Unit test target must be 8.0 in order to build Swift unit tests. (Jeff Verkoeyen)
  • [Ink] Changed MDCInkView API to better reflect the modern ink behavior (breaking). (Adrian Secord)
  • [Other] Fixes block comments globally. (Adrian Secord)
  • [FlexibleHeader] Prefer CGFloat when calculating shadow intensity. (Jeff Verkoeyen)
  • [Demos] Adding Font Opacities for all labels in Pesto (Will Larche)
  • [FlexibleHeader] Always project the flexible header's frame onto the tracking scroll view. (Jeff Verkoeyen)
  • [Catalog] Temporarily bump deployment target to 9.0 (Ian Gordon)
  • [MDCButton] Remove Work In Progress annotation (Ian Gordon)
  • [FlexibleHeader] Comment the #endif statements. (Jeff Verkoeyen)
  • [Typography] Re-added deleted file for deprecated class (randallli)
  • [FlexibleHeader] Revert tracking scroll view delegate assertion. (Jeff Verkoeyen)
  • [Pesto] Add example of MDCInk in Pesto header (Junius Gunaratne)
  • [Typography] Remove /** */ internal comments. (Jeff Verkoeyen)
  • [AppBar] Templatize the back button image. (Jeff Verkoeyen)
  • [Demos] Add legal copy above source files (Junius Gunaratne)
  • [Pesto] Change small header logo to text (Junius Gunaratne)
  • [UICollectionViewLayout] Correction for arithmetic (Will Larche)
  • [Shrine] Use small text logo on scroll, add did change page event handler (Junius Gunaratne)
  • [Site] Switch markdown formatting. (Jason Striegel)
  • [Site] Slider markdown formatting. (Jason Striegel)
  • [Site] ShadowLayer editing intro and markdown formatting. (Jason Striegel)
  • [Icons] MDCIcons+BundleLoader.h must be a protected header. (Jeff Verkoeyen)
  • [Demos] Pesto: Minor issues in style and safety (Will Larche)
  • [Site] ShadowElevations markdown formatting. (Jason Striegel)
  • [Site] Bash example consistency pass. (Jason Striegel)
  • [Icons] Base source needs its own explicit target. (Jeff Verkoeyen)
  • [Site] PageControl docs formatting, images, and video. (Jason Striegel)
  • [Icons] Add missing header search paths in pod specs. (Jeff Verkoeyen)
  • [Catalog] Update colors to blue branding color (Junius Gunaratne)
  • [AppBar] Provide recommendations for status bar style. (Jeff Verkoeyen)
  • [SpritedAnimationView] Remove testAnimationPerformance. (Jeff Verkoeyen)
  • [AppBar] Minor typo. (Jeff Verkoeyen)

2.2.0

Deprecations
  • [Typography] Marked FontResource deprecated. Use the renamed component as FontDiskLoader. (randallli)
Enhancements
  • [AppBar Example] Addressing code style feedback from D326. (Jeff Verkoeyen)
  • [AppBar] Add typical Swift usage example. (Jeff Verkoeyen)
  • [AppBar] Add UINavigatonItem section. (Jeff Verkoeyen)
  • [AppBar] readme updates. (Jeff Verkoeyen)
  • [AppBar] Remove unnecessary code from the ObjC example. (Jeff Verkoeyen)
  • [AppBar] Standardize and document the examples in preparation for upcoming examples. (Jeff Verkoeyen)
  • [AppBar] Use the catalog's blue color in the examples. (Jeff Verkoeyen)
  • [Button] Change ink color on buttons to improve visibility of ink (Junius Gunaratne)
  • [Catalog] Miscellaneous cleanup and fixes to the Catalog. (Jeff Verkoeyen)
  • [Catalog] Update catalog home screen to new light themed design (Junius Gunaratne)
  • [Docs] Navigationbar initial markdown formatting. (Jason Striegel)
  • [FlexibleHeader] Assert that the tracking scroll view has a delegate. (Jeff Verkoeyen)
  • [FlexibleHeader] Only call sizeToFit on the flexible header view when it does not have a tracking scroll view. (Jeff Verkoeyen)
  • [FlexibleHeader] Poke the header into laying out its content when the view controller has been fully registered. (Jeff Verkoeyen)
  • [FontDiskLoader] Revived old class, MDCFontResource, and marked it deprecated. (randallli)
  • [Icons] Add private/ directory to Icons target. (Jeff Verkoeyen)
  • [Icons] Added component (Jeff Verkoeyen)
  • [Icons] Bundles can't have plusses in their names. (Jeff Verkoeyen)
  • [Ink] markdown formatting. (Jason Striegel)
  • [Ink] Minor tweaks to ink for more consistency with other platforms (Junius Gunaratne)
  • [Site] Remove alternate remotes from build-site remote determination. (Jeff Verkoeyen)
  • [Site] Updates to top links and markdown formatting. (Jason Striegel)
  • [Site] Using HTML markup for lists to avoid github comment issue. (Jason Striegel)
  • [Typography] Moved the FontLoader and FontResource into their own components. (randallli)

2.1.1

Enhancements
Code
  • [AppBar] Add App Bar builder API. (Jeff Verkoeyen)
  • [AppBar] Fix compiler warnings about formatting NSIntegers. (Adrian Secord)
  • [FlexibleHeader] MDCFlexibleHeaderViewController conforms to UITableViewDelegate. (Jeff Verkoeyen)
  • [Ink] Updated the ink example to include smaller shapes. (Adrian Secord)
  • [Ink] Visual adjustments to ink ripple (Junius Gunaratne)
  • [NavigationBar] Add back button icon. (Jeff Verkoeyen)
Examples
  • [Demos] Updates to header behavior and minor layout changes after UX review (Junius Gunaratne)
  • [Pesto] Adding ‘nonatomic’ attribute to all delegates (Will Larche)
  • [Pesto] Corrections for build warnings (Will Larche)
  • [Pesto] making string and URL propertys ‘copy’ (Will Larche)
  • [Pesto] Style update: @property ivars (larche)
  • [Pesto] Update card zoom animation to be more Material Design like (Junius Gunaratne)
Docs and site
  • [Docs] Minor touchups to FlexibleHeader readme. (Jeff Verkoeyen)
  • [Docs] Minor updates to AppBar readme. (Jeff Verkoeyen)
  • [Docs] Updated community/README.md (Katy Kasmai)
  • [FlexibleHeader] README.md formatting. (Jason Striegel)
  • [Site] AppBar jump links to open in new tab. (Jason Striegel)
  • [Site] Buttons jump link formatting. (Jason Striegel)
  • [Site] Corrected links and formatting. (Jason Striegel)
  • [Site] Formatting markdown structure for site. (Jason Striegel)
  • [Site] Jump link styling for ButtonBar README. (Jason Striegel)
  • [Site] New formatting for Buttons documentation. (Jason Striegel)
  • [Site] Removing defunct placeholder documents. (Jason Striegel)
  • [Site] Replacing lorem with description content, where possible. (Jason Striegel)
  • [Site] Update component landing page's nav list (Yiran Mao)

2.1.0

Enhancements
  • [AppBar] Introducing the App Bar component. (Jeff Verkoeyen)
  • [Arcanist] Adds scripts/install_arc.sh, which installs or updates arc and our project-specific dependencies. (Adrian Secord)
  • [Arcanist] Updated Arcanist config to use submodules. (Adrian Secord)
  • [ButtonBar] Add ButtonBar component. (Jeff Verkoeyen)
  • [ButtonBar] Add ButtonBar readme. (Jeff Verkoeyen)
  • [Buttons] Add Flatbutton commonInit (Ian Gordon)
  • [Buttons] Add storyboard sample (Ian Gordon)
  • [Buttons] Clean up API documentation style. (Jeff Verkoeyen)
  • [Catalog] Adds localizable strings to catalog. Allows changing language in scheme for debugging. Closes #166. (Chris Cox)
  • [Catalog] Moving assets into catalog by convention. (Jeff Verkoeyen)
  • [CocoaPods] Allow pod install to be run from anywhere for the catalog. (Jeff Verkoeyen)
  • [CocoaPods] Standardizing the podspec format. (Jeff Verkoeyen)
  • [CocoaPods] Variables for podspec. (Jeff Verkoeyen)
  • [Examples] Moved all example resources into a examples/resources/ directory by convention. Jeff Verkoeyen
  • [FlexibleHeader] Add headerIsTranslucent API. (Jeff Verkoeyen)
  • [FlexibleHeader] Add sizeThatFits contract tests. (Jeff Verkoeyen)
  • [FlexibleHeader] Prefer use of childViewControllerForStatusBarHidden. (Jeff Verkoeyen)
  • [FlexibleHeader] Add tests for basic tracking scroll view contract. Jeff Verkoeyen
  • [HeaderStackView] Add HeaderStackView README. (Jeff Verkoeyen)
  • [NavigationBar] Add NavigationBar component. (Jeff Verkoeyen)
  • [Pesto] Update layout after design review with UX, fix rotation issues (Junius Gunaratne)
  • [Pesto] Update network image request methods, improve collection view cell layout (Junius Gunaratne)
  • [Scripts] Add generate_jazzy_yamls script. (Jeff Verkoeyen)
  • [Scripts] Added ‘bump version’ script and updated pod_install_all. (Adrian Secord)
  • [Shrine] Layout updates after UX design review, make sure rotation works correctly (Junius Gunaratne)
  • [Shrine] Use improved network image class from Pesto (Junius Gunaratne)
  • [Testing] Add support for xcode unit tests to arc unit. (Jeff Verkoeyen)
Bug Fixes
  • [AppBar] Minor changes to MDCAppBar documentation. (Jeff Verkoeyen)
  • [Buttons] Adjust the title insets of text buttons, not the frame. (Jeff Verkoeyen)
  • [Buttons] Fix uppercasing (Ian Gordon)
  • [Buttons] Fixes a bug with contentEdgeInsets for MDCFloatingButtonShapeMini. (Matt Rubin)
  • [Catalog] Remove the root catalog workspace. (Jeff Verkoeyen)
  • [CocoaPods] Minor fixes to Podspec for ButtonBar and Switch. (Jeff Verkoeyen)
  • [CocoaPods] Ran pod install on all Podfiles (randallli)
  • [CocoaPods] Update Podfile.lock (Ian Gordon)
  • [FlexibleHeader] Cleaning up the README.md. (Jeff Verkoeyen)
  • [FlexibleHeader] Minor wording consistency in FlexibleHeader readme. (Jeff Verkoeyen)
  • [HeaderStackView] Generated missing HeaderStackView .jazzy.yaml. (Jeff Verkoeyen)
  • [Ink] Fix animation, split foreground and background ripple into independent classes (Junius Gunaratne)
  • [Ink] Set evaporate point so ink expands from correct point on gesture cancel (Junius Gunaratne)
  • [Other] Remove the project templates directory. (Jeff Verkoeyen)
  • [PageController] Fix FP conversion warning (Ian Gordon)
  • [Site] Add landing page placeholder markdown files & update build-site.sh (Yiran Mao)
  • [Site] Continued work on markdown doc formatting. (Jason Striegel)
  • [Site] Editing pass at community.md. (Jeff Verkoeyen)
  • [Site] Fixed section regarding our license. (Jeff Verkoeyen)
  • [Site] Formatting for icon list markdown. (Jason Striegel)
  • [Site] Initial import of site build structure. (Jason Striegel)
  • [Site] Preliminary additions of the components checklist. (Jeff Verkoeyen)
  • [Site] Update community.md (Katy Kasmai)
  • [Site] Updates to the community.md doc. Jeff Verkoeyen
  • [SpritedAnimationView] Replaces example checkmark icon with grid/list icon. Closes #151. (Chris Cox)
  • [SpritedAnimationView] Updates readme image assets to new URL (Chris Cox)
  • [SpritedAnimationView] Updates readme, test, and example with grid/list icon. (Chris Cox)

2.0.4

Breaking
Enhancements
  • Fixed the reference to the private folder of Typography in podspec.
Bug Fixes

2.0.3

Breaking
Enhancements
  • Renamed the privateWasCapitalPrivate folders to private.
Bug Fixes

2.0.2

Breaking
Enhancements
  • Renamed the Private folders to privateWasCapitalPrivate.
Bug Fixes

2.0.1

Breaking
Enhancements
  • Removed unused files: podfile.lock
Bug Fixes

2.0.0

Breaking
  • [FlexibleHeader] Removed -[MDCFlexibleHeaderViewController addFlexibleHeaderViewToParentViewControllerView], MDCFlexibleHeaderParentViewController, and +[MDCFlexibleHeaderViewController addToParent:]. These methods were marked deprecated in 1.0.0. Jeff Verkoeyen
Enhancements
  • Components

    • [Slider] default color updated to nicer blue.
    • [Ink] Replace rand() with arc4random() to avoid a static analyzer warning. Ian Gordon
    • [FlexibleHeader] Removed redundant APIs from MDCFlexibleHeaderContainerViewController. Jeff Verkoeyen
    • Rename Private directories to private. (Jeff Verkoeyen)
  • Documentation

    • [Button] Readme copy edits
  • [Conventions] Moved all docs assets into a docs/assets directory per component by convention. Issue #130 filed by peterfriese. Closed by Jeff Verkoeyen

  • [CONTRIBUTING] Document our file system conventions in CONTRIBUTING.md. Jeff Verkoeyen

  • [CONTRIBUTING] Document our pull request expectations in CONTRIBUTING.md. Jeff Verkoeyen

  • [Switch] Removed internal docs that were pretending to be public docs. Jeff Verkoeyen

  • Catalog

    • Use single asset for component icons. Junius Gunaratne
    • Style catalog component screen and change to collection view. Junius Gunaratne
    • Sorts titles alphabetically. Also fixes title typo in sliders. Chris Cox
    • Catalog by convention grabs storyboard resources. Randall Li
    • Increasing our warnings coverage. Jeff Verkoeyen
    • Support duplicate hierarchy entries. Randall Li
    • Add support for Swift examples and unit tests Jeff Verkoeyen
    • Added Swift sample for buttons. Peter Friese
    • Refactored Button example to be compatibile with catalog by convention Randall Li
    • Refactored Slider example to be compatibile with catalog by convention Randall Li
    • Refactored ShadowLayer example to be compatible with catalog by convention Randall Li
    • Refactored Switch example to be compatible with catalog by convention Randall Li
    • Added Swift example for Typography. Peter Friese
  • Demos

    • Shrine
  • Misc

    • [Jazzy] scripts/gendocs.sh now infers Jazzy arguments by convention. Jeff Verkoeyen
    • [gh-pages] Minor tiding of the preview script for gh-pages. Jeff Verkoeyen Enforced lint with arc lint --everything.
  • Enable line length warnings in arc lint. Jeff Verkoeyen

  • Added script to run pod install on all pods. Randall Li

  • Fix build breakage in MDCCatalog.

  • [FlexibleHeader] Removed redundant APIs from MDCFlexibleHeaderContainerViewController. Jeff Verkoeyen

  • Increasing our warnings coverage. Jeff Verkoeyen

Bug Fixes
  • [scripts/gendocs.sh] Ensure that doc assets show up in jazzy output. peterfriese
  • [MDCSlider] Fixed to issue that was causing the slider to disappear when disabled. Randall Li
  • Ensure that all private directory references are lower-cased. Jeff Verkoeyen
  • [MDCSlider] fixed disabled state so it has the mask around the thumb. Randall Li
  • MaterialComponentsUnitTests.podspec depends on MaterialComponents. Jeff Verkoeyen
  • [PageControl] Add missing ss.resource_bundles to the podspec.
  • [Various] Fixed floating-point conversion warnings with Xcode 6 release mode. ajsecord
  • [Typography] Add CoreText dependency.

1.0.1

Enhancements
  • [Switch] Removed internal docs that were pretending to be public docs. Jeff Verkoeyen

1.0.0

Breaking
  • [MDCFlexibleHeaderView] Removed shadowIntensity property, use setShadowLayer:intensityDidChangeBlock: instead. Jeff Verkoeyen
  • [MDCInkTouchControllerDelegate] Renamed inkTouchControllerShouldProcessInkTouches: to inkTouchController:shouldProcessInkTouchesAtTouchLocation:. Chris Cox
Deprecations
  • MDCFlexibleHeaderParentViewController, +[MDCFlexibleHeaderViewController addToParent], and -[MDCFlexibleHeaderViewController addFlexibleHeaderViewToParentViewControllerView]. These APIs are being deprecated in favor of the eventual equivalent AppBar convenience APIs. In the meantime the FlexibleHeader will need to be instantiated and configured like a typical UIViewController.
Enhancements
  • [MDCFlexibleHeaderView] Added setShadowLayer:intensityDidChangeBlock:. Jeff Verkoeyen
  • [MDCHeaderStackView] Added MDCHeaderStackView. Jeff Verkoeyen
  • [MDCSlider] Changed default color. Randall Li
  • [MDCSlider] Readme.md copy edits. Randall Li
  • [MDCSwitch] Readme.md copy edits. Randall Li
  • [MDCTypograpy:example] Refactored to be compatible with catalog by convention Randall Li
  • [Shrine] First pass at a new Swift demo app, “Shrine”. Junius Gunaratne
Bug Fixes
  • Fixed issue where MDCShadowLayer would ghost behind the MDCFlexibleHeaderView. Jeff Verkoeyen

0.2.1

Bug Fixes

0.2.0

Enhancements
Bug Fixes

x.x.x

This is a template. When cutting a new release, rename “master” to the release number and create a new, empty “Master” section.

Breaking
Enhancements
Bug Fixes