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.
Deleted the MDCFloatingActionButtonThemer class. Use the theming extension.
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.
headerViewController and contentViewController, without VO getting stuck, by making the view hierarchy's accessibilityElements explicit. (Jake Rockland)160. This adjustment ensures that for drawer contents that are quite small (ex. 100pt) the drawer contents to not become undismissable. Without this adjustment it is nearly impossible to achieve a scroll offset of (40pt), the current kVerticalDistanceDismissalThreshold, making the drawer effectively undismissable. (Jake Rockland)CGFloat topAreaInsetForHeader = (self.headerViewController ? self.topSafeAreaInset : 0); usage into its own private method. (Nobody)label.frame has proven unreliable during this scenario because of animations in progress. (Andrew Overton)This minor release introduces iOS 13 support for BottomNavigation, divider customization for ActionSheet actions, and several bug fixes.
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"); }
MDCBottomNavigationBar now supports iOS 13's large content viewer functionality.
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.
New extension.
New extension.
New extension.
New extension.
New extension.
New extension.
imagePadding tests. (#9441) (Robert Moore)contentPadding API. (#9440) (Robert Moore)imagePadding behavior. (#9442) (Robert Moore)This major hotfix release reverts a change introduced in 101.1.0 that caused Snackbar not to appear in some situations.
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.
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.
tvOS support is being added to some of our components.
padding APIs. (#9423) (Robert Moore)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.
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.
The MDCFlexibleHeaderColorThemer no longer exists.
We deprecated MDCHeaderStackViewColorThemer. No current replacement exists.
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;
deprecated class: MDCHeaderStackViewColorThemer, no replacement exists.
new property: shouldIncludeSafeAreaInInitialDrawerHeight in MDCBottomDrawerPresentationController.
new property: shouldIncludeSafeAreaInInitialDrawerHeight in MDCBottomDrawerViewController.
In this minor release we addressed a bug in MDCSnackbar where the Snackbar would not read the accessibilityHint.
In this patch release we addressed a bug in MDCSnackbar where the Snackbar would not clipToBounds if the legacy behavior was enabled.
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.
The inkColor in MDCInkView is now null_resettable.
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;
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;
new property: presentationOpacityAnimationDuration in MDCAlertController.
new property: presentationScaleAnimationDuration in MDCAlertController.
new property: presentationInitialScaleFactor in MDCAlertController.
new property: permitInferringTopSafeAreaFromTopLayoutGuideViewController in MDCFlexibleHeaderViewController.
modified property: inkColor in MDCInkView to be null_resettable.
const keyword to CGFloat and UIEdgeInsets constants in MDCDialogPresentationController. (#9325) (Randall Li)This patch release is an empty release intended solely to connect stable to develop's ancestry.
This patch release is an empty release intended solely to re-connect the develop and stable branch histories.
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.
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;
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.
Delete inkColor and enableRippleBehavior from MDCActionSheetItemTableViewCell
Delete MDCBottomNavigationBarTypographyThemer
Deprecate MDCListColorThemer
Deprecate MDCListTypographyThemer
removed class: MDCBottomNavigationBarTypographyThemer. Please use the Theming extension instead.
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.)
This hotfix patch release fixes the podspec. The previous release forgot to remove deleted references to card themers.
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.
Delete inkColor and enableRippleBehavior properties.
Delete MDCBottomNavigationBarColorThemer
Delete MDCCardsColorThemer Delete MDCCardsShapeThemer
Delete MDCFeatureHighlightFontThemer
Delete MDCInkColorThemer
Delete MDCListThemer
Delete MDCPageControlColorThemer
Delete MDCProgressViewColorThemer
Delete MDCSnackbarColorThemer
Delete MDCTabBarFontThemer
Delete MDCTextFieldFontThemer
Deprecate MDCButtonColorThemer Deprecate MDCFloatingActionButtonThemer Deprecate MDCTextButtonThemer Deprecating MDCButtonScheme Deprecating MDCButtonShapeThemer Deprecating MDCButtonTypographyThemer Deprecating MDCContainedButtonThemer Deprecating MDCOutlinedButtonThemer
Delete Themer classes
Deprecate MDCFeatureHighlightTypographyThemer
Deprecate MDCBottomDrawerColorTHemer
Deprecate MDCTextFieldTypographyThemer Deprecate MDCOutlinedTextFieldColorThemer
removed property: inkColor in MDCActionSheetController. Use rippleColor instead.
removed property: enableRippleBehavior in MDCActionSheetController. Use ripple.
removed class: MDCBottomNavigationBarColorThemer. Use MaterialBottomNavigation+Theming instead.
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.).
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.
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.
removed class: MDCInkColorThemer. Please use Ripple instead.
removed class: MDCListScheming. Please use MDCContainerScheme APIs. removed class: MDCListScheme. Please use MDCContainerScheme APIs. removed class: MDCListThemer. Please use MDCContainerScheme APIs.
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.
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.
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.
removed class: MDCSnackbarColorThemer. Please use the Theming extension instead.
removed class: MDCTabBarFontThemer. Please use the theming extension instead.
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.
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
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.
Delete deprecated MDCBottomAppBarColorThemer
Delete snackbarMessageViewTextColor
Delete MDCTextFieldColorThemer
Deprecated inkColor. Use the ripple APIs.
Deprecate MDCBottomNavigationTypography themer
Deprecate MDCButtonBarColorThemer
Deprecate MDCFloatingButtonShapeThemer
Deprecate MDCCardThemer
Deprecate MDCFeatureHighlightFontThemer
Deprecate MDCInkColorThemer
Deprecate-MDCPageControlColorThemer-applyColorScheme-toPageContro
Deprecate MDCSnackbarColorThemer
Deprecate MDCTabBarColorThemer
Deprecate MDCTextFieldFontThemer
ChipFieldShouldBeginEditing method to MDCChipFieldDelegate to control if editing is allowed.
- (BOOL)chipFieldShouldBeginEditing:(MDCChipField *)chipField {
return YES;
}
Adds elementToFocusOnDismiss to MDCSnackbarMessage so a client can specify a view to focus on after the snackbar message is dismissed.
snackBarMessage.elementToFocusOnDismiss = view;
deprecated property: inkColor in MDCActionSheetController. Use rippleColor instead.
deprecated property: enableRippleBehavior in MDCActionSheetController. Use ripple.
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.
deprecated class: MDCBottomNavigationBarTypographyThemer. Please use the Theming extension instead.
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.
deprecated class: MDCFloatingButtonShapeThemer. Please use [MDCFloatingButton applySecondaryThemeWithScheme:] instead. (Note: Shape theming is no longer available as an independent API.
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.
new method: -chipFieldShouldBeginEditing: in MDCChipFieldDelegate. Asks the delegate if editing should begin in the specified chip field.
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.
deprecated class: MDCInkColorThemer. Please use Ripple instead.
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.
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.
deprecated class: MDCTabBarColorThemer. Please use the Theming extension instead.
MDCTabBarViewLayoutStyle (#9132) (Robert Moore)In this hotfix we revert c83333f to address issue where dialog messages are not properly displayed during rotation while VoiceOver is on.
In this major release we deleted a bunch of APIs already marked deprecated in the Button Bar, Button, Ink, Chip componnts.
MDCButton removed cornerRadius.
We removed a bunch of themer classes and protocols that are not part of our latest theming offering.
We deprecated the color themer in preperation of deleting it. Use theming instead.
We deprecated the color themer in preperation of deleting it. Use theming instead.
We deprecated the color themer in preperation of deleting it. Use theming instead.
We deprecated the color themer in preperation of deleting it. Use theming instead.
We deprecated the color themer in preperation of deleting it. Use theming instead.
We deprecated the color themer in preperation of deleting it. Use theming instead.
We deprecated the private thumbtrack component's thumbMaxRippleRadius.
removed property: cornerRadius in MDCButton
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.
deprecated class: MDCBottomNavigationBarColorThemer. Use MaterialBottomNavigation+Theming instead.
deprecated class: MDCOutlinedButtonColorThemer. Please use [MDCButton applyOutlinedThemeWithScheme:] instead. (Note: Color theming is no longer available as an independent API.
deprecated class: MDCTextButtonColorThemer. Please use [MDCButton applyTextThemeWithScheme:] instead. (Note: Color theming is no longer available as an independent API.)")
deprecated class: MDCCardsColorThemer. Please use MaterialCards+Theming instead.
deprecated class: MDCTabBarFontThemer. Please use the theming extension instead.
deprecated class: MDCTextFieldColorThemer. Please use the MaterialTextFields+Theming instead.
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
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.
####MDCChipViewColorThemer
Use Chips+Theming to theme the ChipView instead.
####MDCChipViewShapeThemer
Use Chips+Theming to theme the ChipView instead.
Please use [MDCFloatingButton applySecondaryThemeWithScheme:] instead.
Please use [MDCButton applyContainedThemeWithScheme:] instead.
###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:.
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 }
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; }
new property: navigationBarHidden in MDCAppBarNavigationController new property: `shouldSetNavigationBarHiddenHideAppBar;
deprecated class: MDCChipViewColorThemer. Use Chips+Theming instead. deprecated class: MDCChipViewShapeThemer. Use Chips+Theming instead.
new property: dialogTransform in MDCDialogPresentationController
new property: opacityAnimationDuration in MDCDialogTransitionController new property: scaleAnimationDuration in MDCDialogTransitionController new property: dialogInitialScaleFactor in MDCDialogTransitionController
new enum value: MDCFlexibleHeaderShiftBehaviorHideable in MDCFlexibleHeaderShiftBehavior
new property: usesSuperviewShadowLayerAsMask in MDCRippleView
This minor release introduces new APIs to ActionSheet, BottomSheet and FlexibleHeader. Additionally, it includes new theming extensions for TextControls component.
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)
new property: contentEdgeInsets in MDCActionSheetController
new property: dismissOnDraggingDownSheet in MDCBottomSheetController
new property: dismissOnDraggingDownSheet in MDCBottomSheetPresentationController
new property: dismissOnDraggingDownSheet in MDCBottomSheetTransitionController
new property: shiftedOffscreen in MDCFlexibleHeaderView(ShiftBehavior)
contentEdgeInsets API. (#9008) (Robert Moore)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.
adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in MDCSnackbarManager
adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in MDCSnackbarMessageView
buttonFont in example (#8772) (Cody Weaver)label text (#8803) (Randall Li)This minor release introduces new APIs to MDCAppBarViewController and MDCSlider. Additionally, it includes some fixes for Banner constraints.
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
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;
new property: shouldAdjustHeightBasedOnHeaderStackView in MDCAppBarViewController
new property: discrete in MDCSlider
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.
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; }];
viewDidLayoutSubviews (#8735) (Cody Weaver)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.
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)
Fix MDCSnackbarMessage convenience class methods (#8746) (Yarden Eitan)
Fix MDCSnackbarMessage convenience class methods (#8751) (Yarden Eitan)
This minor release introduces new APIs for Slider. The track height and the visibility of track tick marks can be customized.
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;
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.
Add behavioral flag for animating shadow layer frames when tracking scroll view is changed (#8715) (featherless)
Expose an animation delegate on MDCFlexibleHeaderView. (#8712) (featherless)
Move all supplemental code into the examples. (#8690) (featherless)
This minor release adds two new APIs to FlexibleHeader for contexts involving multiple tracking scroll views (such as tabbed interfaces).
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.
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.
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.
MDCOverlayWindow now supports being initialized with initWithWindowScene: as part of the new UIWindow iOS 13 APIs.
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;
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.
This minor hotfix release deprecates the buttonFont API of MDCAlertController.
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 }
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 |
buttonFont deprecated. (#8649) (Robert Moore)This major release deletes MaskedTransition, fixes bugs in ActionSheet, and adds an API to Buttons related to fonts.
MaskedTransition has been deleted.
alwaysAlignTitleLeadingEdges. (#8610) (Robert Moore)This minor release prepares MDCButton for the deprecation and removal of its titleFont:forState: APIs in a future release.
This minor release addresses issues with Dialogs in Dark Mode, adds delegate methods for Navigation Drawer, and makes Outlined Text Areas more configurable.
This minor release deprecates Chips+ChipThemer and MDCChipViewFontThemer.
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 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?) { }
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) { }
systemFontOfSize:weight:. (#8581) (Robert Moore)This minor hotfix adds a missing podspec dependency to TextFields+ContainedInputView extension.
This minor release introduces new color properties to TextFields and removes max size constraints on ActivityIndicator.
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
This minor hotfix release adds a new accessory view feature to MDCAlertController.
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
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.
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;
Header can expand even if content doest fill screen.
self.navigationDrawer.shouldAlwaysExpandHeader = YES;
mdc_adjustsFontForContentSizeCategory with (#8476) (Robert Moore)This major release removes the mdc_adjustsFontForContentSizeCategory API from MDCTypographyScheming. It makes useCurrentContentSizeCategoryWhenApplied required for all implementations.
Classes conforming to MDCTypographyScheming must now provide the API useCurrentContentSizeCategoryWhenApplied. It was previously recommended that it be bound to the value of mdc_adjustsFontForContentSizeCategory.
mdc_adjustsFontForContentSizeCategory with (#8476) (Robert Moore)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.
This minor release adds support for customizing the elevation on ActionSheet component, and updates its theming extension to apply a customized elevation value.
This major release deletes several deprecated APIs and annotates several APIs as deprecated. Usage of UIWebView has also been replaced with WKWebView.
Buttons shouldRaiseOnTouch was deleted. Set elevation to MDCShadowElevationNone for all states instead.
Buttons underlyingColor property was deleted. Use underlyingColorHint instead.
MDCMaskedTransitionController was deprecated. There is no replacement for this component. Please use a standard presentViewController invocation instead.
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.
This major release deletes several deprecated APIs and annotates several APIs as deprecated.
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.
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.
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.
This major release deletes several deprecated APIs, includes bug fixes for iOS 13, and improves haptics support in Slider.
Buttons' customTitleColor and shouldCapitalizeTitle APIs have been deleted.
Chips' inkColor API has been deleted.
This minor release makes the Banner component generally available, and provides a bug fix for Buttons.
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.”
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.
new property: labelBehavior in MDCBaseTextField
new property: label in MDCBaseTextField
new enum value: MDCTextControlLabelBehaviorDisappears in MDCTextControlLabelBehavior
new enum: MDCTextControlLabelBehavior
new enum value: MDCTextControlLabelBehaviorFloats in MDCTextControlLabelBehavior
new typedef: MDCTextControlLabelBehavior
This patch release adds performance improvements to Ripple during its initilization and layout phases.
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.
Buttons and Chips removed the mdc_legacyFontScaling API. It can be replaced with adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in all instances without any change in behavior.
Typography's API mdc_adjustsFontForContentSizeCategory is now deprecated and will be replaced with useCurrentContentSizeCategoryWhenApplied. It will be removed in a future release.
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.
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.
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.
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];
New extension.
removed property: mdc_legacyFontScaling in MDCButton
new property: adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in MDCSnackbarManager
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 |
new property: adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in MDCSnackbarMessageView
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 |
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. |
NS_ASSUME_NONNULL_BEGIN. (#8298) (Robert Moore)NS_ASSUME_NONNULL_BEGIN. (#8300) (Robert Moore)NS_ASSUME_NONNULL_BEGIN. (#8301) (Robert Moore)NS_ASSUME_NONNULL_BEGIN. (#8299) (Robert Moore)This patch release corrects issues with Git-LFS on the stable branch.
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.
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.
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 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];
new method: -mdc_resolvedColorWithTraitCollection:previousTraitCollection:elevation: in UIColor(MaterialElevation)
new property: mdc_elevationDidChangeBlockForMessageView in MDCSnackbarManager
new property: traitCollectionDidChangeBlockForMessageView in MDCSnackbarManager
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 |
This patch release includes no code changes but is necessary due to merge problems with the stable branch in version 87.0.1.
This patch release fixes a bug where Git-LFS was required on the stable branch.
This major release improves the traitCollectionDidChangeBlock for MDCButton.
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.
button.traitCollectionDidChangeBlock = ^(UITraitCollection *_Nullable previousTraitCollection) { // Code };
button.traitCollectionDidChangeBlock = ^(MDCButton *_Nonnull buttonInBlock, UITraitCollection *_Nullable previousTraitCollection) { // Code };
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; |
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.
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;
new property: tintColor in MDCActionSheetAction
new property: titleColor in MDCActionSheetAction
new property: trailingView in MDCBaseTextField
new property: leadingViewMode in MDCBaseTextField
new property: leadingView in MDCBaseTextField
new property: trailingViewMode in MDCBaseTextField
accessibilityIdentifier to the item view (#8240) (Robert Moore)accessibilityHint to the accessibility element. (#8241) (Robert Moore)In this major release we have provided improvements to our Elevation code for Dark Mode as well as internal clean up.
Our MDCElevatable protocol now conforms to NSObject so it can leverage the isKindOfClass: and conformsToProtocol: APIs.
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 |
This minor release introduces Material Elevation support for ActionSheet and Banner (Beta). It also includes performance improvements for Ink and Ripple.
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.
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.
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.
additionalSafeAreaInsets behavior. (#8113) (Robert Moore)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.
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.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;
sizeThatFitsIncludesSafeArea. (#8066) (Robert Moore)sizeThatFitsIncludesSafeArea. (#8065) (Robert Moore)nil. (#8083) (Robert Moore)childViewControllers. (#7992) (Robert Moore)mdc_overrideBaseElevation (#8075) (Robert Moore)elevationDidChangeBlock type. (#8106) (Robert Moore)This patch release fixes a crash in BottomNavigation when a KVO'd property is assigned nil.
nil. (#8083) (Robert Moore)This minor release includes new elevation protocols to prepare for Dark Mode, dynamic color support in several components, and a number of MDCTabBarView features.
Several components support traitCollectionDidChangeBlock to allow clients inject a block for exection when traitCollections changes. TabBarView allows clients to set preferred layout style.
new property: traitCollectionDidChangeBlock in MDCActionSheetController
new property: traitCollectionDidChangeBlock in MDCActivityIndicator
new property: traitCollectionDidChangeBlock in MDCBannerView
new property: traitCollectionDidChangeBlock in MDCBottomAppBarView
new property: traitCollectionDidChangeBlock in MDCBottomSheetController
new property: traitCollectionDidChangeBlock in MDCBottomSheetPresentationController
new property: traitCollectionDidChangeBlock in MDCButtonBar
new property: traitCollectionDidChangeBlock in MDCCard
new property: traitCollectionDidChangeBlock in MDCCardCollectionCell
new property: traitCollectionDidChangeBlock in MDCChipView
new property: shadowColor in MDCAlertController
new property: traitCollectionDidChangeBlock in MDCAlertController
new property: dialogShadowColor in MDCDialogPresentationController
new property: traitCollectionDidChangeBlock in MDCDialogPresentationController
new property: mdc_currentElevation in MDCElevatable
new property: mdc_elevationDidChangeBlock in MDCElevatable
new protocol: MDCElevatable
new property: mdc_overrideBaseElevation in MDCElevatable
new protocol: MDCElevatableOverriding
new property: traitCollectionDidChangeBlock in MDCBaseCell
new property: traitCollectionDidChangeBlock in MDCBottomDrawerPresentationController
new property: traitCollectionDidChangeBlock in MDCBottomDrawerViewController
new property: activeRippleColor in MDCRippleView
removed method: -setActiveRippleColor: in MDCRippleView
new property: thumbShadowColor in MDCSlider
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
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.
Several components support traitCollectionDidChangeBlock to allow clients inject a block for exection when traitCollections changes. Slider supports Haptics feature.
new property: traitCollectionDidChangeBlockForAppBarController in MDCAppBarNavigationController
new property: traitCollectionDidChangeBlock in MDCBottomNavigationBar
new property: traitCollectionDidChangeBlock in MDCButton
new property: traitCollectionDidChangeBlock in MDCFlexibleHeaderContainerViewController
new property: shadowColor in MDCFlexibleHeaderView
new property: traitCollectionDidChangeBlock in MDCFlexibleHeaderView
new property: traitCollectionDidChangeBlock in MDCFlexibleHeaderViewController
new property: traitCollectionDidChangeBlock in MDCNavigationBar
new property: headerShadowColor in MDCBottomDrawerContainerViewController
new property: shouldEnableHapticsForAllDiscreteValues in MDCSlider
new property: messageElevation in MDCSnackbarManager
new property: elevation in MDCSnackbarMessageView
new property: traitCollectionDidChangeBlock in MDCSnackbarMessageView
new method: -rectForItem:inCoordinateSpace: in MDCTabBarView
new property: elevationOverlayColor in MDCColorScheming
new property: elevationOverlayEnabledForDarkMode in MDCColorScheming
new property: elevationOverlayColor in MDCSemanticColorScheme
new property: elevationOverlayEnabledForDarkMode in MDCSemanticColorScheme
defaultTraitCollectionDidChangeBlock for injecting into AppBars. (#7887) (Robert Moore)traitCollectionDidChangeBlock to AppBarViewController. (#7851) (Robert Moore)traitCollectionDidChangeBlock API. (#7893) (Robert Moore)accessibilityElementForItem: API. (#7818) (Robert Moore)setSelected:animated: API for custom views. (#7810) (Robert Moore)selectedImage from UITabBarItem. (#7814) (Robert Moore)contentInset directly in layout. (#7816) (Robert Moore)nil for KVO'd title. (#7806) (Robert Moore)This minor release exposes some properties on Snackbars and fixes a Banner bug.
new property: buttonInkColor in MDCSnackbarManager
new property: uppercaseButtonTitle in MDCSnackbarManager
new property: disabledButtonAlpha in MDCSnackbarManager
This minor release includes features and bug fixes for the MDCTabBarView Beta component.
removed protocol: MDCTabBarViewIndicatorSupporting
removed property: bounds in MDCTabBarViewIndicatorSupporting
removed property: contentFrame in MDCTabBarViewIndicatorSupporting
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; |
new property: bottomDividerColor in MDCTabBarView
new method: -accessibilityElementForItem: in MDCTabBarView
new property: bounds in MDCTabBarViewCustomViewable
new property: contentFrame in MDCTabBarViewCustomViewable
new protocol: MDCTabBarViewCustomViewable
new method: -setSelected:animated: in MDCTabBarViewCustomViewable
accessibilityElementForItem: API. (#7818) (Robert Moore)setSelected:animated: API for custom views. (#7810) (Robert Moore)selectedImage from UITabBarItem. (#7814) (Robert Moore)contentInset directly in layout. (#7816) (Robert Moore)nil for KVO'd title. (#7806) (Robert Moore)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.
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.
ProgressView now has a theming extension.
MDCProgressView *progressView = [[MDCProgressView alloc] init]; MDCContainerScheme *containerScheme = [[MDCContainerScheme alloc] init]; [progressView applyThemeWithScheme:containerScheme];
New extension.
new property: hapticsEnabled in MDCSlider
contentFrame for item view. (#7782) (Robert Moore)contentView from item view. (#7795) (Robert Moore)This minor release includes changes to the MDCTabBarView Beta component.
new protocol: MDCTabBarViewIndicatorTemplate
new method: -indicatorAttributesForContext: in MDCTabBarViewIndicatorTemplate
new class: MDCTabBarViewIndicatorAttributes
new property: path in MDCTabBarViewIndicatorAttributes
new property: contentFrame in MDCTabBarViewIndicatorContext
new protocol: MDCTabBarViewIndicatorContext
new property: item in MDCTabBarViewIndicatorContext
new property: bounds in MDCTabBarViewIndicatorContext
new property: rippleColor in MDCTabBarView
new class: MDCTabBarViewUnderlineIndicatorTemplate
contentFrame for item view. (#7782) (Robert Moore)This minor release includes changes to the MDCTabBarView Beta component.
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.
MDCBanner now supports intrinsicContentSize.
MDCBannerView *myBanner = ... CGSize validIntrinsicContentSize = myBanner.intrinsicContentSize;
new property: mdc_adjustsFontForContentSizeCategory in MDCBannerView
New extension.
new protocol: MDCTabBarViewIndicatorSupporting
new property: contentFrame in MDCTabBarViewIndicatorSupporting
new property: bounds in MDCTabBarViewIndicatorSupporting
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
new class: MDCTabBarItem
new protocol: MDCTabBarItemCustomViewing
new property: mdc_customView in MDCTabBarItemCustomViewing
new method: -tabBarView:shouldSelectItem: in MDCTabBarViewDelegate
new protocol: MDCTabBarViewDelegate
new method: -tabBarView:didSelectItem: in MDCTabBarViewDelegate
New extension.
barTintColor API. (#7711) (Robert Moore)selectedItem values not in items. (#7702) (Robert Moore)title and image properties (#7700) (Robert Moore)In this minor release we have begun development of a new Tab component, as well as additional tests and bug fixes.
Chips now support selection for ripple when in the selected state.
MDCChipView *chipView = [[MDCChipView alloc] init]; chipView.enableRippleBehavior = YES; chipView.rippleAllowsSelection = YES;
new property: rippleAllowsSelection in MDCChipView
new class: MDCTabBarView
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.
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.
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;
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;
new property: rippleColor in MDCActionSheetController
new property: enableRippleBehavior in MDCActionSheetController
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 |
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
new property: bannerViewLayoutStyle in MDCBannerView
new property: showsDivider in MDCBannerView
new property: dividerColor in MDCBannerView
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 |
new property: enableRippleBehavior in MDCBottomNavigationBar
new property: enableRippleBehavior in MDCButtonBar
new property: rippleColor in MDCButtonBar
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 |
new property: enableRippleBehavior in MDCAlertControllerView
new property: enableRippleBehavior in MDCAlertController
new property: rippleColor in MDCBaseCell
new property: enableRippleBehavior in MDCBaseCell
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 |
new property: enableRippleBehavior in MDCNavigationBar
new property: rippleColor in MDCNavigationBar
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 |
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 |
new property: enableRippleBehavior in MDCSlider
new property: rippleColor in MDCSlider
new property: enableRippleBehavior in MDCSnackbarMessage
new property: enableRippleBehavior in MDCTabBar
new property: rippleColor in MDCTabBar
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 |
sizeThatFitsIncludesSafeArea to NO. (#7554) (Robert Moore)-itemAtIndexPath: safe (#7555) (Andrew Overton)In this minor release we added new features to ActionSheet and NavigationDrawer, as well as additional tests and bug fixes.
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
new property: alwaysAlignTitleLeadingEdges in MDCActionSheetController
new property: shouldIncludeSafeAreaInContentHeight in MDCBottomDrawerViewController new property: shouldIncludeSafeAreaInContentHeight in MDCBottomDrawerPresentationController
maximumRadius API. #7538 (Cody Weaver)In this minor release we have expanded our support for NavigationBar as well as additional tests and bug fixes.
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`
new method: -rectForLeadingBarButtonItem:inCoordinateSpace in MDCNavigationBar new method: -rectForTrailingBarButtonItem:inCoordinateSpace in MDCNavigationBar
buttonFont (#7509) (Cody Weaver)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.
mdc_legacyFontScaling in MDCButton and MDCChipView has been deprecated. Please use adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable instead.
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.
new method: -rectForItem:item:inCoordinateSpace in MDCButtonBar
new property: adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in MDCButton
deprecated property: mdc_legacyFontScaling in MDCButton
new property: adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in MDCChipView
deprecated property: mdc_legacyFontScaling in MDCChipView
new property: adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in MDCAlertController
new property: adjustsFontForContentSizeCategoryWhenScaledFontIsUnavailable in MDCSelfSizingStereoCell
new method: mdc_scaledFontForTraitEnvironment:traitEnvironment in UIFont+MaterialScalable
new property: useCurrentContentSizeCategoryWhenApplied in MDCTypographyScheming
new property: useCurrentContentSizeCategoryWhenApplied in MDCTypographyScheme
This minor release adds new theming extensions for Lists and minor bug fixes and documentation updates to multiple components.
Theming extensions are now available for Lists:
let cell = MDCSelfSizingStereoCell() let scheme = MDCContainerScheme() cell.applyTheme(withScheme: scheme)
modified class: MDCChipView
new property: mdc_legacyFontScaling in MDCChipView
New extension.
This patch release fixes a bug where dialogs were not indicating that their content was scrollable.
This minor release adds support for a custom unbounded Ripple radius value. It also includes several bug fixes and documentation updates to multiple components.
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;
new property: maximumRadius in MDCRippleView
modified constant: MDCShadowElevationNavDrawer
| Type of change: | Declaration |
|---|---|
| From: | static const MDCShadowElevation MDCShadowElevationNavDrawer = (CGFloat)16. |
| To: | static const MDCShadowElevation MDCShadowElevationNavDrawer = (CGFloat)4. |
This patch release fixes ActionSheet to lay out its content correctly when there is a safe area present, for iOS 11 and newer.
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.
MDCInkTouchController now gives users the ability to require that UIScrollView gesture recognizers fail before the ink animation is triggered. (#7315)
inkTouchController.requiresFailureOfScrollViewGestures = YES;
new property: requiresFailureOfScrollViewGestures in MDCInkTouchController
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.
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
Moved from beta to ready
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); }
Ripple support was added.
chipView.enableRippleBehavior = YES;
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) |
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; |
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 |
This patch release fixes a crashing bug with ActionSheet during rotation.
This patch release resolves some missing content from the theming extension documentation and removes a broken link.
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:
AppBar's Theming extension header has changed, so you may need to update your import statements accordingly:
- import MaterialComponents.MaterialAppBar_MaterialTheming + import MaterialComponents.MaterialAppBar_Theming
- #import "MaterialAppBar+MaterialTheming.h" + #import "MaterialAppBar+Theming.h"
modified class method: +applySemanticColorScheme:toActivityIndicator: in MDCActivityIndicatorColorThemer(ToBeDeprecated)
| Type of change: | parent.usr |
|---|---|
| From: | c:objc(cs)MDCActivityIndicatorColorThemer |
| To: | c:objc(cy)MDCActivityIndicatorColorThemer@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 |
modified class method: +applyTypographyScheme:toAppBarViewController: in MDCAppBarTypographyThemer(ToBeDeprecated)
| Type of change: | parent.usr |
|---|---|
| From: | c:objc(cs)MDCAppBarTypographyThemer |
| To: | c:objc(cy)MDCAppBarTypographyThemer@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 |
modified class method: +applySemanticColorScheme:toBottomNavigation: in MDCBottomNavigationBarColorThemer(ToBeDeprecated)
| Type of change: | parent.usr |
|---|---|
| From: | c:objc(cs)MDCBottomNavigationBarColorThemer |
| To: | c:objc(cy)MDCBottomNavigationBarColorThemer@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 |
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 |
modified class method: +applySemanticColorScheme:toButtonBar: in MDCButtonBarColorThemer(ToBeDeprecated)
| Type of change: | parent.usr |
|---|---|
| From: | c:objc(cs)MDCButtonBarColorThemer |
| To: | c:objc(cy)MDCButtonBarColorThemer@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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
modified class method: +applyColorScheme: in MDCAlertColorThemer
| Type of change: | parent.usr |
|---|---|
| From: | c:objc(cy)MDCAlertColorThemer@ToBeDeprecated |
| To: | c:objc(cs)MDCAlertColorThemer |
removed category: MDCAlertColorThemer(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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
modified class method: +applySemanticColorScheme:toSlider: in MDCSliderColorThemer(ToBeDeprecated)
| Type of change: | parent.usr |
|---|---|
| From: | c:objc(cs)MDCSliderColorThemer |
| To: | c:objc(cy)MDCSliderColorThemer@ToBeDeprecated |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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.
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.
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.
func appBarNavigationController(_ navigationController: MDCAppBarNavigationController, trackingScrollViewFor trackingScrollViewForViewController: UIViewController, suggestedTrackingScrollView: UIScrollView?) -> UIScrollView? { return trackingScrollView }
- (UIScrollView *)appBarNavigationController:(MDCAppBarNavigationController *)navigationController trackingScrollViewForViewController:(UIViewController *)viewController suggestedTrackingScrollView:(UIScrollView *)scrollView { return self.trackingScrollView; }
flashScrollIndicators in BottomSheetMDCBottomSheetController has a new API that will flash the scroll indicators when the view appears.
bottomSheet.shouldFlashScrollIndicatorsOnAppearance = true;
self.bottomSheet.shouldFlashScrollIndicatorsOnAppearance = YES;
maximumInitialDrawerHeight in NavigationDrawerClients can now override the initial drawer height on MDCBottomDrawerViewController with a desired height in points.
bottomDrawer.maximumInitialDrawerHeight = 1000;
self.bottomDrawer.maximumInitialDrawerHeight = 1000;
new method: -appBarNavigationController:trackingScrollViewForViewController:suggestedTrackingScrollView: in MDCAppBarNavigationControllerDelegate
new property: shouldFlashScrollIndicatorsOnAppearance in MDCBottomSheetController
new property: maximumInitialDrawerHeight in MDCBottomDrawerViewController
new property: maximumInitialDrawerHeight in MDCBottomDrawerPresentationController
New extension.
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.
Buttons now support the latest iteration of the Material Design “ripple” effect. Clients can test this functionality by setting enableRippleBehavior to YES.
myButton.enableRippleBehavior = true
self.myButton.enableRippleBehavior = YES;
New component.
badgeColor changes. (#7008) (Robert Moore)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.
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.
Cards now support the latest iteration of the Material Design “ripple” effect. Clients can test this functionality by setting enableRippleBehavior to YES.
myCard.enableRippleBehavior = true
self.myCard.enableRippleBehavior = YES;
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.
bottomNavigationBar.titlesNumberOfLines = 0
self.bottomNavigationBar.titlesNumberOfLines = 0;
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.
// 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
// 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;
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 |
new property: titlesNumberOfLines in MDCBottomNavigationBar
new property: mdc_legacyFontScaling in MDCButton
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 |
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 |
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 |
new property: mdc_legacyFontScaling in MDCFeatureHighlightViewController
new method: -addRippleToView: in MDCRippleTouchController
modified method: -init in MDCRippleTouchController
| Type of change: | key.always_unavailable |
|---|---|
| From: | 1 |
| To: | 0 |
new method: -rippleTouchController:insertRippleView:intoView: in MDCRippleTouchControllerDelegate
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.
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; }
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.
// 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];
// 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()
new constant: MDCTextStyleButton
new constant: MDCTextStyleCaption
new constant: MDCTextStyleSubtitle2
new constant: MDCTextStyleSubtitle1
new constant: MDCTextStyleBody1
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)
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
new constant: MDCTextStyleHeadline4
new constant: MDCTextStyleHeadline3
new constant: MDCTextStyleHeadline2
new constant: MDCTextStyleHeadline6
new constant: MDCTextStyleBody2
new typedef: MDCTextStyle
new constant: MDCTextStyleOverline
new constant: MDCTextStyleHeadline1
new constant: MDCTextStyleHeadline5
new enum value: MDCTypographySchemeDefaultsMaterial201902 in MDCTypographySchemeDefaults
new property: mdc_adjustsFontForContentSizeCategory in MDCTypographyScheme
new property: mdc_adjustsFontForContentSizeCategory in MDCTypographyScheming
accessibilityTraits in init. (#6948) (Robert Moore)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.
accessibilityTraits in init. (#6948) (Robert Moore)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.
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]; } }
New extension.
new method: -trackingScrollViewDidChangeAdjustedContentInset: in 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 |
New extension.
This patch release fixes a bug in BottomNavigation where the icons were not showing up correctly.
This minor release increases our snapshot testing coverage and introduces a migration flag for including UIAccessibilityTraitButton in MDCButton's accessibilityTraits.
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.
new property: accessibilityTraitsIncludesButton in MDCButton
accessibilityTraits. (#6766) (Robert Moore)This patch release removes NS_REQUIRES_SUPER from several MDCCollectionViewController APIs, removing the requirement to call super.
| 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; |
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.
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.
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;
}
MDCFlexibleHeaderViewController introduces a new safeAreaDelegate that can be used to change which view controller is used when extracting top safe area insets.
new property: sizeThatFitsIncludesSafeArea in MDCBottomNavigationBar
new property: barItemsBottomAnchor in MDCBottomNavigationBar
new method: -flexibleHeaderViewControllerTopSafeAreaInsetViewController: in MDCFlexibleHeaderSafeAreaDelegate
new protocol: MDCFlexibleHeaderSafeAreaDelegate
new property: safeAreaDelegate in MDCFlexibleHeaderViewController
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; |
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; |
In this patch release we have provided a ChipTextField example along with some Beta theming bug fixes.
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.
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.
New component - promoted to Ready.
New component - Migrated to components/ from components/private.
New component - Migrated to components/ from components/private.
In this release we made improvements to BottomNavigationBar and landed stateful ripple in the ripple (beta) component.
Removed a deprecated API:
@property(nonatomic, assign) UIEdgeInsets itemsContentInsets
BottomNavigation can use blur in its background when not fully opaque
self.bottomNavBar.backgroundBlurEnabled = YES;
We automatically truncate titles that go out of bounds but added a flag to allow some clients to still overflow.
self.navigationBar.truncatesLongTitles = NO;
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
new property: backgroundBlurEffectStyle in MDCBottomNavigationBar
new property: backgroundBlurEnabled in MDCBottomNavigationBar
new property: truncatesLongTitles in MDCBottomNavigationBar
removed property: itemsContentInsets in MDCBottomNavigationBar
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
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
itemsContentInsets API (#6584) (Robert Moore)Fix build tooling.
Fix Cocoapods validation failures.
Add additional snapshot tests and mark outdated theming API as deprecated.
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.
itemsContentInsets API (#6557) (Robert Moore)This major release changes the Material Theming colors for Cards cells. It also includes bug fixes for Navigation Drawer and Text Fields.
The MDCCardsColorThemer now sets the imageTintColor:forState: on MDCCardCollectionCell. This property was previously unset by the themer.
new property: minimumPressDuration in MDCCollectionViewEditing
/beta. (#6501) (Robert Moore)trackingScrollView (#6492) (Cody Weaver)initialDrawerFactor (#6491) (Cody Weaver)This patch release reformats the entire code base to align to the latest Google Objective-C Style enforced by clang-format.
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.
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.
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
borderWidthForState: (#6415) (Cody Weaver)buildifier on all BUILD files (#6345) (Robert Moore)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.
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.
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.
In this patch release we have improved the formatting of our codebase, and added missing imports to the Dragons target.
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.
var scheme: MDCContainerScheming { let scheme = MDCContainerScheme() scheme.colorScheme = colorScheme scheme.typographyScheme = typographyScheme scheme.shapeScheme = shapeScheme return scheme } ... let card = MDCCard() card.applyTheme(withScheme: scheme)
var scheme: MDCContainerScheming { let scheme = MDCContainerScheme() scheme.colorScheme = colorScheme scheme.typographyScheme = typographyScheme scheme.shapeScheme = shapeScheme return scheme } ... let chipView = MDCChipView() chipView.applyTheme(withScheme: scheme)
let alert = MDCAlertController(title: "Title", message: "Message") alert.backgroundColor = .white
let navigationBar = MDCNavigationBar() navigationBar.titleInsets = UIEdgeInsets(top: 0, left: 16, bottom: 0, right: 16)
New extension.
New extension.
New component.
visibility args. (#6073) (Robert Moore)Disabled snapshot tests use text properties. (#6070) (Robert Moore)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.
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"); } })
New extension.
new method: -expandToFullscreenWithDuration:completion: in MDCBottomDrawerViewController
new method: -expandToFullscreenWithDuration:completion: in MDCBottomDrawerPresentationController
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 |
isEditing snapshots for Filled style (#5988) (Robert Moore)isEditing snapshots for Full Width (#5989) (Robert Moore)isEditing snapshots for Outlined Text Area (#5994) (Robert Moore)isEditing snapshots for Outlined style (#5990) (Robert Moore)leadingImage snapshots. (#6028) (Robert Moore)disabled state (#6026) (Robert Moore)recordMode to -setUp (#5998) (Robert Moore)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.
MDCBottomSheetController *bottomSheet = [[MDCBottomSheetController alloc] initWithContentViewController:viewController]; bottomSheet.scrimColor = UIColor.blueColor; [self presentViewController:bottomSheet animated:YES completion:nil];
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)
{Git-LFS} Exclude git-lfs from stable #5977
editing snapshots for Outlined (#5964) (Robert Moore)isEditing changes. (#5972) (Robert Moore)This minor release fixes a ChipField RTL issue.
Corrected readme version to match cocopods version.
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.
textButton.applyTextTheme(withScheme: MDCContainerScheme())
var scheme: MDCContainerScheming {
let scheme = MDCContainerScheme()
scheme.colorScheme = colorScheme
scheme.typographyScheme = typographyScheme
return scheme
}
...
buttonBar.applyPrimaryTheme(withScheme: scheme)
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];
MDCFloatingButtonThemer changes its mapping to use a title color #5912
An MVP view with layout was added to examples.
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:
This minor release introduces a new Alpha ContainerScheme type and several bug fixes.
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.
New component.
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.
Component properties are no longer encoded or decoded for any component.
Improvements made to Navigation Drawer:
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.
removed method: -initWithCoder: in MDCFloatingButton
new method: -updateReorderCellPosition in MDCCollectionViewEditing
new method: -setContentOffsetY:animated: in MDCBottomDrawerViewController
new property: contentReachesFullscreen in MDCBottomDrawerPresentationController
new method: -setContentOffsetY:animated: in MDCBottomDrawerPresentationController
new property: respectsUserInterfaceLayoutDirection in MDCPageControl
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 |
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> |
This major release introduces a breaking change with Snackbar's default style. It also includes a new top handle and performance improvements for NavigationDrawer.
usesLegacySnackbar is now NO by default.
MDCBottomNavigationBar has a new elevation property.
NavigationDrawer has the following changes:
modified class method: +applySurfaceVariantWithColorScheme:toAppBar: in MDCAppBarColorThemer(ToBeDeprecated)
modified class method: +applySemanticColorScheme:toAppBar: in MDCAppBarColorThemer(ToBeDeprecated)
modified class method: +applyTypographyScheme:toAppBar: in MDCAppBarTypographyThemer(ToBeDeprecated)
new property: elevation in MDCBottomNavigationBar
new protocol: MDCBottomDrawerViewControllerDelegate
new method: -bottomDrawerControllerDidChangeTopInset:topInset: in MDCBottomDrawerViewControllerDelegate
new property: topHandleHidden in MDCBottomDrawerPresentationController
new property: topHandleColor in MDCBottomDrawerPresentationController
new property: topHandleColor in MDCBottomDrawerViewController
new property: delegate in MDCBottomDrawerViewController
new property: topHandleHidden in MDCBottomDrawerViewController
-init for Color Scheme. (#5734) (Robert Moore)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.
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];
new property: scrimColor in MDCBottomDrawerViewController
new property: scrimColor in MDCBottomDrawerPresentationController
new method: -animateCornerRadius:withTimingFunction:duration: in MDCShadowLayer
new class method: +applySemanticColorScheme:toSnackbarManager: in MDCSnackbarColorThemer
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.
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)
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> |
new enum: MDCBottomDrawerState
new enum value: MDCBottomDrawerStateExpanded in MDCBottomDrawerState
new enum value: MDCBottomDrawerStateCollapsed in MDCBottomDrawerState
new typedef: MDCBottomDrawerState
new enum value: MDCBottomDrawerStateFullScreen in MDCBottomDrawerState
new property: delegate in MDCBottomDrawerPresentationController
new method: -bottomDrawerWillChangeState:drawerState: in MDCBottomDrawerPresentationControllerDelegate
new method: -bottomDrawerTopTransitionRatio:transitionRatio: in MDCBottomDrawerPresentationControllerDelegate
new protocol: MDCBottomDrawerPresentationControllerDelegate
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.
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.
NavigationDrawer now has a color themer.
Sliders now respect exclusive touches.
New extension.
This minor release introduces new functionality for theming individual buttons of an MDCAlertController.
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)
new property: buttonScheme in MDCAlertScheming
new property: buttonScheme in MDCAlertScheme
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; |
new enum: MDCActionEmphasis
new enum value: MDCActionEmphasisLow in MDCActionEmphasis
new enum value: MDCActionEmphasisMedium in MDCActionEmphasis
new enum value: MDCActionEmphasisHigh in MDCActionEmphasis
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; |
new property: emphasis in MDCAlertAction
new class method: +actionWithTitle:emphasis:handler: in MDCAlertAction
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.
nil by setting the BOOL property resetShadowAfterTrackingScrollViewIsReset.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.
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.
New extension.
New extension.
New extension.
Shapes updated it's interface. ActionSheet improvements. List added a typography themer.
Shapes updated its API. See #5247 for details.
New extension.
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.
MDCAppBarTextColorAccessibilityMutator a deprecated class got deleted.
Action sheet got the color and typography themers.
let actionSheet = MDCActionSheetController() MDCActionSheetColorThemer.applySemanticColorScheme(colorScheme, to: actionSheet)
MDCActionSheetTypographyThemer.applyTypographyScheme(typographyScheme, to: actionSheet)
Bottom App Bar got a new property to offset the floating button.
bottomAppBar.floatingButtonVerticalOffset = 5.0f;
AlertController got a themer
MDCAlertScheme *alertScheme = [[MDCAlertScheme alloc] init]; alertScheme.colorScheme = self.colorScheme; alertScheme.typographyScheme = self.typographyScheme; [MDCAlertControllerThemer applyScheme:alertScheme toAlertController:alertController];
To make Snackbars with action require a user action set the this property to YES.
manager.shouldEnableAccessibilityViewIsModal = YES;
New extension.
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
new property: floatingButtonVerticalOffset in MDCBottomAppBarView
new property: titleAlignment in MDCAlertController
new property: titleAlignment in MDCAlertControllerView
new property: shouldEnableAccessibilityViewIsModal in MDCSnackbarManager
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.
Card Buttons and Chips all are using the shape subsystem, which subtly changed the way their corner radii are rendered.
cornerRadiusA property to specify its shape.
MDCAlertController *alert = [MDCAlertController alertControllerWithTitle:@"title" message:@"message"]; [alert addAction:[MDCAlertAction actionWithTitle:@"action1" handler:nil]]; alert.cornerRadius = cornerRadius;
disableContentInsetAdjustmentWhenContentInsetAdjustmentBehaviorIsNeverTo make it easier to support scrollviews and content insets
_scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds]; if (@available(iOS 11.0, *)) { _scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; }
showChipsDeleteButtonTurns 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
preferredSheetHeight to let clients define a non half screen height.presentationController = [[MDCBottomSheetPresentationController alloc] initWithPresentedViewController:stubPresentedViewController presentingViewController:stubPresentingViewController]; presentationController.preferredSheetHeight = 100;
new property: preferredSheetHeight in MDCBottomSheetTransitionController
new property: preferredSheetHeight in MDCBottomSheetPresentationController
new property: shapeScheme in MDCButtonScheming
new property: shapeScheme in MDCButtonScheme
New component.
new property: shapeScheme in MDCChipViewScheming
new property: shapeScheme in MDCChipViewScheme
new property: showChipsDeleteButton in MDCChipField
New component.
New component.
new property: cornerRadius in MDCAlertController
new property: cornerRadius in MDCAlertControllerView
new property: disableContentInsetAdjustmentWhenContentInsetAdjustmentBehaviorIsNever in MDCFlexibleHeaderView
updatePreferredSheetHeight. (#5115) (Robert Moore)sheetView a property. (#5122) (Robert Moore)Breaking: Integrate the shape themer into the MDCButton themer (#5120) (Yarden Eitan)
Add the Floating Button Shape themer to the Floating Button themer (#5132) (Yarden Eitan)
Addition of a FAB shape themer (#5131) (Yarden Eitan)
Addition of a Shape Themer for MDCButton (#5119) (Yarden Eitan)
Integrate the FAB shape themer into our examples (#5133) (Yarden Eitan)
Integration of the button shape themer into the examples (#5121) (Yarden Eitan)
[Shapes] Bug fix for getting the wrong backgroundColor when shapeGenerator is set. (#5127) (Yarden Eitan)
Breaking: Integrate the shape themer into the chip themer (#5112) (Yarden Eitan)
Add client the ability to delete chips in a chip field (#5135) (Cody Weaver)
Addition of a Shape Themer (#5111) (Yarden Eitan)
Integration of the chip themer into the examples (#5113) (Yarden Eitan)
Support RTL in MDCChipCollectionViewFlowLayout (#5079) (jsaletta)
Update example (#5118) (Cody Weaver)
[Shapes] Bug fix for getting the wrong backgroundColor when shapeGenerator is set. (#5127) (Yarden Eitan)
This major release adds additional support for shape theming to BottomSheet and Cards and improvements to ActionSheets, BottomAppBar, BottomNavigation, Dialogs, NavigationBar, and TextFields.
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.
backgroundColor can now be customized.viewForItem: API.modified property: backgroundColor in MDCActionSheetController
| Type of change: | Declaration |
|---|---|
| From: | @property(nonatomic, nonnull, strong) UIColor *backgroundColor |
| To: | @property (readwrite, strong, nonatomic, nonnull) UIColor *backgroundColor; |
new class method: +applySurfaceVariantWithSemanticColorScheme:toBottomAppBarView: in MDCBottomAppBarColorThemer
new property: trailingBarItemsTintColor in MDCBottomAppBarView
new property: leadingBarItemsTintColor in MDCBottomAppBarView
new method: -viewForItem: in MDCBottomNavigationBar
New extension.
new property: shapeScheme in MDCCardScheme
new property: shapeScheme in MDCCardScheming
New extension.
new property: leadingBarItemsTintColor in MDCNavigationBar
new property: trailingBarItemsTintColor in MDCNavigationBar
New component.
This hotfix minor release rolls back a behavioral change in Dialogs that was introduced in v60.0.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.
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.
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> |
new property: transitionController in MDCActionSheetController
New component.
new method: -buttonBarDidInvalidateIntrinsicContentSize: in MDCButtonBarDelegate
new property: uppercasesButtonTitles in MDCButtonBar
new property: delegate in MDCButtonBar
New component.
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
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).
No longer support Xcode 8.
-buttonBar:viewForItem:layoutHints: in MDCButtonBarDelegatenew property: accessibilityIdentifier in MDCAlertAction new property: accessibilityHint in MDCSnackbarMessageView new property: accessibilityLabel in MDCSnackbarMessageView new property: accessibilityHint in MDCSnackbarMessage
ActionSheets present a list of actions from the bottom of the screen.
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.
New component.
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! |
new property: accessibilityIdentifier in MDCAlertAction
modified class: MDCAlertAction
| Type of change: | Declaration |
|---|---|
| From: | @interface MDCAlertAction : NSObject <NSCopying> |
| To: | @interface MDCAlertAction : NSObject <NSCopying, UIAccessibilityIdentification> |
New component.
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; |
New component.
new property: accessibilityHint in MDCSnackbarMessageView
new property: accessibilityLabel in MDCSnackbarMessageView
new property: accessibilityHint in MDCSnackbarMessage
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 |
accessibilityHint. (#4924) (Robert Moore)This minor release introduces a new behavioral flag for changing the title font size on MDCNavigationBar.
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
new property: allowAnyTitleFontSize in MDCNavigationBar
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.
MDCAppBarTextColorAccessibilityMutator. MDCAlertController *alert = [MDCAlertController alertControllerWithTitle:@"title"
message:@"message"];
alert.buttonInkColor = testColor;
deprecated class: MDCAppBarTextColorAccessibilityMutator
deprecated method: -mutate: in MDCAppBarTextColorAccessibilityMutator
new property: buttonInkColor in MDCAlertController
new property: buttonInkColor in MDCAlertControllerView
moved category: MDCFlexibleHeaderView()
modified property: contentView in MDCFlexibleHeaderView()
safeAreaInsets availability check (#4775) (Robert Moore)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.
This breaking change only affects Swift code and requires the following changes.
// Before .preferredStatusBarStyle() // After .preferredStatusBarStyle
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
MDCColorScheme and MDCBasicColorScheme will both be deprecated on the following timeline:
Learn more by reading the migration guide.
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
new property: preferredStatusBarStyle in MDCFlexibleHeaderViewController
new property: inferPreferredStatusBarStyle in MDCFlexibleHeaderViewController
removed method: -preferredStatusBarStyle in MDCFlexibleHeaderViewController
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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
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 |
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 |
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 |
This patch release undoes some additional App Bar initialization changes that were introduced in v59.2.0.
This patch release reverts an unintentional change in App Bar shadow layer initialization behavior that was introduced in v59.2.0.
This minor release introduces several new improvements to the AppBar component and bug fixes and accessibility improvements to various components.
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)
new class method: +applySurfaceVariantWithColorScheme:toAppBarViewController: in MDCAppBarColorThemer
new class method: +applyColorScheme:toAppBarViewController: in MDCAppBarColorThemer
new property: appBarViewController in MDCAppBar
new method: -appBarNavigationController:willAddAppBarViewController:asChildOfViewController: in MDCAppBarNavigationControllerDelegate
new method: -appBarViewControllerForViewController: in MDCAppBarNavigationController
new property: appBarViewController in MDCAppBarContainerViewController
new class: MDCAppBarViewController
new class method: +applyTypographyScheme:toAppBarViewController: in MDCAppBarTypographyThemer
new method: -setHelperText:helperAccessibilityLabel: in MDCTextInputController
accessibilityLabel on MDCChipView (#4664) (compositeprimes)This patch release fixes a bug with Flexible Header when VoiceOver is enabled.
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.
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.
new class: MDCAppBarNavigationController
new property: delegate in MDCAppBarNavigationController
new method: -appBarForViewController: in MDCAppBarNavigationController
new protocol: MDCAppBarNavigationControllerDelegate
new method: -appBarNavigationController:willAddAppBar:asChildOfViewController: in MDCAppBarNavigationControllerDelegate
new property: inferTopSafeAreaInsetFromViewController in MDCAppBar
new property: observesTrackingScrollViewScrollEvents in MDCFlexibleHeaderView
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.
AppBar, TextFields, BottomNavigation, and Ink all removed support for encoding/decoding their custom properties.
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.
new property: topSafeAreaGuide in MDCFlexibleHeaderView
new property: inferTopSafeAreaInsetFromViewController in MDCFlexibleHeaderViewController
modified class: MDCTextInputControllerLegacyFullWidth
| Type of change: | Declaration |
|---|---|
| From: | @interface MDCTextInputControllerLegacyFullWidth : MDCTextInputControllerFullWidth <NSSecureCoding> |
| To: | @interface MDCTextInputControllerLegacyFullWidth : MDCTextInputControllerFullWidth |
modified class: MDCTextInputUnderlineView
| Type of change: | Declaration |
|---|---|
| From: | @interface MDCTextInputUnderlineView : UIView <NSCopying, NSSecureCoding> |
| To: | @interface MDCTextInputUnderlineView : UIView <NSCopying> |
modified protocol: MDCTextInputController
| Type of change: | Declaration |
|---|---|
| From: | @protocol MDCTextInputController <NSObject, NSSecureCoding, NSCopying, MDCTextInputPositioningDelegate> |
| To: | @protocol MDCTextInputController <NSObject, NSCopying, MDCTextInputPositioningDelegate> |
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.
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.
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.
new property: itemsContentInsets in MDCBottomNavigationBar
new property: itemsContentHorizontalMargin in MDCBottomNavigationBar
new property: itemsContentVerticalMargin in MDCBottomNavigationBar
removed property: useFlexibleTopBottomInsets in MDCNavigationBar
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.
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.
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)
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
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
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)
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
new enum: MDCSheetState with values MDCSheetStateExtended, MDCSheetStatePreferred, and MDCSheetStateClosed
new method: -bottomSheetWillChangeState:sheetState: in MDCBottomSheetPresentationControllerDelegate
new property: scrimAccessibilityLabel in MDCBottomSheetPresentationController
new property: isScrimAccessibilityElement in MDCBottomSheetPresentationController
new property: scrimAccessibilityTraits in MDCBottomSheetPresentationController
new property: scrimAccessibilityHint in MDCBottomSheetPresentationController
new property: interactable in MDCCardCollectionCell
new property: interactable in MDCCard
New component.
new property: backgroundColor in MDCTextInputControllerFullWidth
new property: backgroundColorDefault in MDCTextInputControllerFullWidth
removed property: backgroundColor in MDCTextInputControllerBase
new property: textInputClearButtonTintColorDefault in MDCTextInputController
new property: textInputClearButtonTintColor in MDCTextInputController
removed property: backgroundColorDefault in MDCTextInputController
removed property: backgroundColor in MDCTextInputController
new method: -mdc_isSimplyEqual: in UIFont(MaterialSimpleEquality)
new category: UIFont(MaterialSimpleEquality)
backgroundColor property (#4452) (Robert Moore)BOOL types (#4436) (Robert Moore)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.
MDCTextField's with iconsnew protocol: MDCLeadingViewTextInput
new property: leadingView in MDCLeadingViewTextInput
new property: leadingViewMode in MDCLeadingViewTextInput
new method: -leadingViewTrailingPaddingConstant in MDCTextInputPositioningDelegate
new method: -leadingViewRectForBounds:defaultRect: in MDCTextInputPositioningDelegate
new method: -trailingViewTrailingPaddingConstant in MDCTextInputPositioningDelegate
new method: -trailingViewRectForBounds:defaultRect: in MDCTextInputPositioningDelegate
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> |
new property: inputLayoutStrut in MDCTextField
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.
MDCNavigationBar's property useFlexibleTopBottomInsets has been defaulted to YES and has now been deprecated. It will eventually be removed and become the default behavior.
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;
new property: topLayoutGuideAdjustmentEnabled in MDCAppBarContainerViewController
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.
This minor release includes added customization to MDCDialogPresentationController, better topLayoutGuide support for MDCFlexibleHeader, doc improvements and other small bug fixes.
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 }
new property: dialogCornerRadius in MDCDialogPresentationController
new property: topLayoutGuideAdjustmentEnabled in MDCFlexibleHeaderContainerViewController
new category: MDCFlexibleHeaderViewController(ToBeDeprecated)
moved method: -updateTopLayoutGuide from class MDCFlexibleHeaderViewController to category MDCFlexibleHeaderViewController(ToBeDeprecated)
new property: topLayoutGuideAdjustmentEnabled in MDCFlexibleHeaderViewController
new property: topLayoutGuideViewController in MDCFlexibleHeaderViewController
This minor release includes new Snackbar features and minor improvements to the Catalog.
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.
new constant: MDCShadowElevationBottomNavigationBar
new enum value: MDCSnackbarAlignmentCenter in MDCSnackbarAlignment
new enum value: MDCSnackbarAlignmentLeading in MDCSnackbarAlignment
new enum: MDCSnackbarAlignment
new property: actionButtons in MDCSnackbarMessageView
new property: delegate in MDCSnackbarManager
new property: alignment in MDCSnackbarManager
new protocol: MDCSnackbarManagerDelegate
new method: -willPresentSnackbarWithMessageView: in MDCSnackbarManagerDelegate
This minor release introduces some new features to Flexible Header and Snackbar and includes some bug fixes in the Catalog app.
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.
new class method: +hasMessagesShowingOrQueued in MDCSnackbarManager
This patch release adds metadata to the bidirectionality eng stub doc.
This patch release adds documentation polish around bidirectionality.
This patch release includes more documentation polish and a bug fix for Cards theming.
This patch release polishes and fleshes out documentation across many of our components. There are no source changes in this release.
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.
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.
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.
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);
new property: hitAreaInsets in MDCChipView
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.
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.
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.
new property: selectedItemTitleColor in MDCBottomNavigationBar
new method: -buttonsTitleColorForState: in MDCButtonBar
new method: -setButtonsTitleColor:forState: in MDCButtonBar
new method: -imageTintColorForState: in MDCButton
new method: -setImageTintColor:forState: in MDCButton
new method: -setButtonsTitleColor:forState: in MDCNavigationBar
new method: -buttonsTitleColorForState: in MDCNavigationBar
new typedef: MDCTabBarItemState
new enum value: MDCTabBarItemStateSelected in MDCTabBarItemState
new enum: MDCTabBarItemState
new enum value: MDCTabBarItemStateNormal in MDCTabBarItemState
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
new property: floatingPlaceholderActiveColorDefault in MDCTextInputControllerFloatingPlaceholder
new property: floatingPlaceholderActiveColor in MDCTextInputControllerFloatingPlaceholder
This release continues to increase coverage of themers across our components.
ButtonBar now has a Typography themer.
NavigationBar now has APIs for customizing title button fonts.
new method: -setButtonsTitleFont:forState: in MDCNavigationBar
new method: -buttonsTitleFontForState: in MDCNavigationBar
This release continues to improve the support for our themer APIs across all components.
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.
new method: -setButtonsTitleFont:forState: in MDCButtonBar
new method: -buttonsTitleFontForState: in MDCButtonBar
This new release introduces shapes support to buttons and a variety of new themer APIs for many components.
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.
new property: shapeGenerator in MDCButton
This release introduces a new API for compositing colors for use by color themers.
new method: MDCSemanticColorScheme +blendColor:withBackgroundColor:
This is a hotfix release fixing a bug in ButtonBar that was introduced in 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.
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.
new property: dismissOnBackgroundTap in MDCBottomSheetPresentationController
new property: dismissOnBackgroundTap in MDCBottomSheetTransitionController
new property: dismissOnBackgroundTap in MDCBottomSheetController
new property: inkColor in MDCButtonBar
new property: inkColor in MDCNavigationBar
new property: useFlexibleTopBottomInsets in MDCNavigationBar
new property: backgroundColor in MDCTextInputControllerBase
new property: backgroundColorDefault in MDCTextInputController
new property: backgroundColor in MDCTextInputController
This release includes bug fixes and increased coverage of our themer APIs for components.
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.
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
Buttons now has a Typography themer.
MDCFlatButton now has a color themer API.
This release continues to expand our support for component Color and Typography theming.
Buttons and Snackbar now have a Color themer.
BottomNavigationBar, Chips, NavigationBar, TextFields each now have a Typography themer.
Dialogs, FeatureHighlight, and TabBar now each have a Typography themer.
ActivityIndicator and AppBar now have an updated Color themer.
new property: titleFont in MDCFeatureHighlightViewController
new property: bodyFont in MDCFeatureHighlightViewController
new property: textInputFont in MDCTextInputController
new property: textInputFontDefault in MDCTextInputController
Snackbar now has a Typography themer.
NavigationBar now exposes a Color themer API that makes use of the MDCColorScheming type.
Added missing CocoaPods dependencies from v54.0.0.
MDCMaskedTransition has been removed and replaced with MDCMaskedTransitionController. You may now use MDCMaskedTransitionController as a standard UIKit transitioning delegate.
Many components now expose new public APIs for configuring typography, color, and shapes.
new property: shapeGenerator in MDCCardCollectionCell
new property: shapeGenerator in MDCCard
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
removed class: MDCMaskedTransition
removed method: -init in MDCMaskedTransition
removed method: -initWithSourceView: in MDCMaskedTransition
removed property: calculateFrameOfPresentedView in MDCMaskedTransition
new property: sourceView in MDCMaskedTransitionController
new method: -initWithSourceView: in MDCMaskedTransitionController
new method: -init in MDCMaskedTransitionController
new property: calculateFrameOfPresentedView in MDCMaskedTransitionController
new class: MDCMaskedTransitionController
new property: titleFont in MDCNavigationBar
new property: titleTextColor in MDCNavigationBar
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; |
Moved to schemes/Typography.
Moved to schemes/Color.
Moved to schemes/Color.
Moved to schemes/Color.
Moved to schemes/Color.
Moved to schemes/Typography.
New component.
primaryColor and applies it to the selectedItemTintColor. It will no longer apply values to either unselectedItemTintColor or barTintColor.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 |
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> |
removed property: textInputFont in MDCTextInputController
removed property: textInputFontDefault in MDCTextInputController
New component.
MDCTabBarFontThemer and MDCBottomAppBarColorThemer changed a argument to nonnull from nullable.
new property: backgroundColor in MDCBottomNavigationBar
new property: barTintColor in MDCBottomNavigationBar
new property: minimumSize in MDCChipView
new property: cardBorderRadius in MDCCollectionViewStyling
new property: textInputFont in MDCTextInputController
new property: textInputFontDefault in MDCTextInputController
barTintColor to replace backgroundColor (#3085) (Robert Moore)NS_UNAVAILABLE property: backgroundColor in MDCBottomAppBarView
new property: barTintColor in MDCBottomAppBarView
NS_UNAVAILABLE property: backgroundColor in MDCBottomAppBarView
new property: shadowColor in MDCBottomAppBarView
new property: backgroundColor in MDCBottomAppBarView
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
removed property: highlightedButtonTextColor in MDCSnackbarMessage
deprecated property: buttonTextColor in MDCSnackbarMessage
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 property: messageTextColor in MDCSnackbarMessageView
new method: -buttonTitleColorForState: in MDCSnackbarMessageView
new property: mdc_adjustsFontForContentSizeCategory in MDCSnackbarMessageView
new method: -setButtonTitleColor:forState: in MDCSnackbarMessageView
new property: usesLegacySnackbar in MDCSnackbarMessage
removed property: highlightedButtonTextColor in MDCSnackbarMessage
removed property: buttonTextColor in MDCSnackbarMessage
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 |
removed property: selectedImageTintColor in MDCCardCollectionCell
removed property: selectedImage in 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
new enum value: MDCCardCellVerticalImageAlignmentBottom in MDCCardCellVerticalImageAlignment
new typedef: MDCCardCellVerticalImageAlignment
new enum: MDCCardCellVerticalImageAlignment
new enum value: MDCCardCellVerticalImageAlignmentCenter in MDCCardCellVerticalImageAlignment
new enum value: MDCCardCellVerticalImageAlignmentTop in MDCCardCellVerticalImageAlignment
new enum value: MDCCardCellHorizontalImageAlignmentRight in MDCCardCellHorizontalImageAlignment
new enum value: MDCCardCellHorizontalImageAlignmentCenter in MDCCardCellHorizontalImageAlignment
new typedef: MDCCardCellHorizontalImageAlignment
new enum: MDCCardCellHorizontalImageAlignment
new enum value: MDCCardCellHorizontalImageAlignmentLeft in MDCCardCellHorizontalImageAlignment
new method: -setProgress:animated: in MDCActivityIndicator
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> |
Remove Material Motion from the BottomSheets component as it was causing crashes on iOS 8.
removed property: dismissOnBackgroundTap in MDCDialogTransition
removed class: MDCDialogTransition
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> |
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> |
Added extra guard to prevent crash cause by adding nil to a NSCache.
New component.
new method: -startTouchBeganAtPoint:animated:withCompletion: in MDCInkView
new method: -startTouchEndAtPoint:animated:withCompletion: in MDCInkView
new class: MDCButtonBarButton
new method: -inkColorForState: in MDCChipView
new method: -setInkColor:forState: in MDCChipView
modified class: MDCChipView
modified property: inkColor in MDCChipView
modified property: inkColor in MDCChipView
new property: buttonFont in MDCSnackbarMessageView
new property: messageFont in MDCSnackbarMessageView
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
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
new property: titleFont in MDCChipView
MDCSlider supports more UIAppearance customization.MDCActivityIndicator provides improved support for animation transitions.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
new typedef: MDCActivityIndicatorAnimation
new method: -startAnimatingWithTransition:cycleStartIndex: in MDCActivityIndicator
new method: -stopAnimatingWithTransition: in MDCActivityIndicator
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; |
caption (#2799) (Robert Moore)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'
Add NSCoding tests (#2740) (Robert Moore)
Added isPresentable to catalog files, ported over ZShadow to dragons. (#2726) (Yarden Eitan)
Correct itemTitleFont behavior (#2736) (Robert Moore)
new method: -setTitleFont:forState: in MDCButton
new method: -titleFontForState: in MDCButton
new property: bodyFont in MDCFeatureHighlightView
new property: titleFont in MDCFeatureHighlightView
This major release includes a variety of API name changes. Please see the API changes below for more details.
MDCTextInputControllerDefault has been removed. Use MDCTextInputControllerUnderline instead.
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 |
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 |
new property: expandsOnOverflow in MDCTextInputControllerBase
new property: borderFillColorDefault in MDCTextInputControllerBase
new property: borderFillColor in MDCTextInputControllerBase
new property: minimumLines in MDCTextInputControllerBase
new class: MDCTextInputControllerBase
removed property: expandsOnOverflow in MDCTextInputControllerDefault
removed property: borderFillColor in MDCTextInputControllerDefault
removed class: MDCTextInputControllerDefault
removed property: borderFillColorDefault in MDCTextInputControllerDefault
removed property: minimumLines in MDCTextInputControllerDefault
removed constant: MDCTextInputDefaultUnderlineActiveHeight
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 |
removed constant: MDCTextInputDefaultBorderRadius
new class: MDCTextInputControllerUnderline
new constant: MDCTextInputControllerBaseDefaultBorderRadius
new property: underlineHeightActiveDefault in MDCTextInputController
new property: underlineHeightActive in MDCTextInputController
new property: underlineHeightNormalDefault in MDCTextInputController
new property: underlineHeightNormal in MDCTextInputController
new method: -mdc_fontSizedForMaterialTextStyle:scaledForDynamicType: in UIFont(MaterialTypography)
New MDCChipField API in the Chips component provides an interface through which a user can input a collection of string tokens.
new constant: MDCChipFieldDefaultContentEdgeInsets
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
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
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
new property: shapeGenerator in MDCChipView
new method: -shadowColorForState: in MDCChipView
new method: -setShadowColor:forState: in MDCChipView
new constant: MDCChipFieldDefaultMinTextFieldWidth
new property: mdc_adjustsFontForContentSizeCategory in MDCFeatureHighlightView
new category: MDCShadowLayer(Subclassing)
new class method: +mdc_standardFontDescriptorForMaterialTextStyle: in UIFontDescriptor(MaterialTypography)
new class method: +mdc_standardFontForMaterialTextStyle: in UIFont(MaterialTypography)
MDCFloatingButton updateShapeForcingLayout (#2625) (Robert Moore)MDCFloatingButtonShapeLargeIcon has been removed.
// Old code
MDCFloatingButton *button =
[MDCFloatingButton floatingButtonWithShape:MDCFloatingButtonShapeLargeIcon];
// New code
MDCFloatingButton *button = [[MDCFloatingButton alloc] init];
BottomSheet has a variety of new deprecations.
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.
new method: -activityIndicatorModeTransitionDidFinish: in MDCActivityIndicatorDelegate
deprecated property: mdc_bottomSheetPresentationController in UIViewController(MaterialBottomSheet). Assign an instance of MDCBottomSheetTransition to your view controller's mdm_transitionController.transition instead.
deprecated class: MDCBottomSheetTransitionController. Assign an instance of MDCBottomSheetTransition to your view controller's mdm_transitionController.transition instead.
deprecated protocol: MDCBottomSheetPresentationControllerDelegate. This API will soon be made private. Use MDCBottomSheetController instead.
deprecated class: MDCBottomSheetPresentationController. This API will soon be made private. Use MDCBottomSheetController instead.
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
new enum value: MDCFloatingButtonModeExpanded in MDCFloatingButtonMode
new enum value: MDCFloatingButtonModeNormal in MDCFloatingButtonMode
new enum: MDCFloatingButtonMode
removed enum value: MDCFloatingButtonShapeLargeIcon in MDCFloatingButtonShape
new enum value: MDCFloatingButtonImageLocationLeading in MDCFloatingButtonImageLocation
new typedef: MDCFloatingButtonImageLocation
new enum: MDCFloatingButtonImageLocation
new enum value: MDCFloatingButtonImageLocationTrailing in MDCFloatingButtonImageLocation
new property: animationDelegate in MDCInkView
new method: -inkAnimationDidStart: in MDCInkViewDelegate
new method: -inkAnimationDidEnd: in MDCInkViewDelegate
new protocol: MDCInkViewDelegate
new property: selectedItemTitleFont in MDCTabBar
new property: titleTextTransform in MDCTabBar
new property: unselectedItemTitleFont in MDCTabBar
new enum: MDCTabBarTextTransform
new enum value: MDCTabBarTextTransformAutomatic in MDCTabBarTextTransform
new typedef: MDCTabBarTextTransform
new enum value: MDCTabBarTextTransformUppercase in MDCTabBarTextTransform
new enum value: MDCTabBarTextTransformNone in MDCTabBarTextTransform
imageTitleSpace (#2565) (Robert Moore)new class: MDCDialogTransition.
breaking changed property signature: MDCInkView's inkColor from null_resettable to nonnull.
new property: usesLegacyInkRipple.
breaking MDCSnackbarMessage's public APIs have all been annotated with nullability annotations.
new class: MDCIntrinsicHeightTextView.
changed property signature: MDCMultilineTextField's textView changed from UITextView to MDCIntrinsicHeightTextView.
MDCAnimationTimingFunctionStandard, MDCAnimationTimingFunctionDeceleration, and MDCAnimationTimingFunctionAcceleration.MDCBottomSheetTransition.New property: -selectionIndicatorTemplate.
New class: MDCTabBarIndicatorAttributes.
New protocol: MDCTabBarIndicatorContext.
New Protocol: MDCTabBarIndicatorTemplate.
New class: MDCTabBarUnderlineIndicatorTemplate.
MDCColorScheme now conforms to NSObject.trackingScrollView property to support better dragging.[MDCTabBar defaultHeightForBarPosition:itemAppearance:].MDCAnimationTimingFunctionSharp timing function from the spec.MDCBottomNavigationBarDelegate with controls on selecting items.minimumSize and maximumSize properties.injectedInkViewForView convenience function to find an ink view in a view hierarchy.disabledColor property.MDCMultilineTextField expandsOnOverflow and placeholder text properties.MDCTextInput expandsOnOverflow property is no longer IBInspectable.No code changes. Added a missing dependency to the BottomNavigation component found after the 38.1.0 release was published.
MDCTextInput.cursorColor controls the color of the blinking cursor (in the text).None for this release.
titleTextAttributes uses a dictionary with keys of type NSAttributedStringKey instead of NSString * so, for example, .font should be used intead of NSAttributedStringKey.font.rawValue.[MDCTextFieldPositioningDelegate textInputDidUpdateConstraints], called after the input's updateConstraints.MDCTextInputControllerDefault's floatingPlaceholderDestination property is replaced with floatingPlaceholderOffset and is a UIOffset, not CGPoint.minMaxHeightIncludesSafeArea to inform the component if the minimumHeight and maximumHeight properties include the safe area inset.-[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.placeholderText property to control the placeholder text.MDCShadowElevation type insetad of raw CGFloats.MDCShadowElevation typedef for shadow elevation values instead of raw CGFloats.MDCTextInputController:inlinePlaceholderFont, inlinePlaceholderFontDefault, leadingUnderlineLabelFont, leadingUnderlineLabelFontDefault`.MDCTextInputControllerFilled, MDCTextInputControllerOutlined, MDCTextInputControllerOutlinedTextArea.MDCTextField.clearButtonMode now supports UIAppearance.new with alloc init to match the style guide. (#2033) (Adrian Secord)[MDCPageControl sizeForNumberOfPages:] method changed from instance method to class method (Cody Weaver)[MDCTextInputControllerDefault floatingPlaceholderColor] renamed to floatingPlaceholderNormalColor, similarly floatingPlaceholderColorDefault and the same for MDCTextInputControllerLegacyDefault.None.
Hotfix: Fixes Feature Highlight configuration.
*Legacy* classes.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.MDCTextInputController properties activeColor, disabledColor, normalColor, and associated default colors.MDCTextInputController properties underlineColorActive, underlineColorNormal, and associated default colors.MDCTextInputUnderlineView properties disabledUnderline and underline in favor of color and disabledColor.scripts/generate_jazzy_yamls.sh for new components. (#1766) (Adrian Secord)scripts/generate_jazzy_yamls.sh for new components. (#1766) (Adrian Secord)scripts/generate_jazzy_yamls.sh for new components. (#1766) (Adrian Secord)Hotfix release: fixes autolayout bug involving TextFields height.
No changes to code or docs, only updating metadata for generating https://material.io/components/ios/.
MDCMultilineTextField, a Material Design-themed mutiline text field (multiline text input).[MDCTextFieldPositioningDelegate sizeThatFits:defaultSize:] has been removed, see [MDCTextFieldPositioningDelegate textInsets:] instead.MDCMultilineTextInput.minimumLines and .expandsOnOverflow properties.typeof and the ?: operator (#1601) (Robert Moore)typeof and the ?: operator (#1601) (Robert Moore)typeof and the ?: operator (#1601) (Robert Moore)typeof and the ?: operator (#1601) (Robert Moore)typeof and the ?: operator (#1601) (Robert Moore)typeof and the ?: operator (#1601) (Robert Moore)typeof and the ?: operator (#1601) (Robert Moore)typeof and the ?: operator (#1601) (Robert Moore)typeof and the ?: operator (#1601) (Robert Moore)typeof and the ?: operator (#1601) (Robert Moore)Hotfix: Cherry picked: [Buttons] Call designated initializer in init methods
Hotfix: Added implementation for accessibilityElementForItem: for MDCTabBar
Hotfix: Fixed missing bump of version numbers.
Hotfix: Added missing dependencies in our podspec from ColorThemer subspecs to Component subspecs.
Fixed podspec
Made MDCFeatureHighlightView public with two properties: innerHighlightColor and outerHighlightColor.
Make [MDCCollectionViewController cellWidthAtSectionIndex:] public.
No change in public APIs.
No change in public APIs.
Add kSelectedCellAccessibilityHintKey
Add kDeselectedCellAccessibilityHintKey
Add [MDCTypography boldItalicFontOfSize:]
Add [MDCTypography boldFontFromFont:]
Add [MDCTypography italicFontFromFont:]
Add [MDCTypography isLargeForContrastRatios]
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.
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)
-[MDCInkTouchController initWithView:] changed from nullable instancetype to nonnull instancetype.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.This point release changes certain podfiles and instructions to refer to the published pod up at CocoaPods.
This point release removes the examples from private/ThumbTrack; they didn't follow our normal conventions and was confusing pod try.
This point release fixes stale references to MDFFontDiskLoader, MDFSpritedAnimationView, and MDFRobotoFontLoader in our CocoaPods podspec.
None.
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.
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; |
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; |
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; |
new method: -updateTopLayoutGuide in MDCFlexibleHeaderViewController
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 |
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 |
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 |
MDCFlexibleHeaderView is now marked IB_DESIGNABLE.MDCSwitch is completely deprecated and will be removed in the next release. We recommend apps use UISwitch instead.scripts/check_components (#946) (Adrian Secord)scripts/check_components (#946) (Adrian Secord)scripts/check_components (#946) (Adrian Secord)scripts/check_components (#946) (Adrian Secord)No public API or component changes.
Added missing components/private/Application/src/MaterialApplication.h umbrella header.
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.
The behavior of MDCSnackbar has been changed to better match the spec:
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; |
new property: editingSelectorColor in MDCCollectionViewCell
MDCInkTouchController.inkViewAuto-generated by running:
scripts/api_diff -o 203562553800ed3d3b5eebfd1dd76cda875d833c -n f8e2c8b5e87d0414f6b08f691949ecebfaca41b8
MDCInkGestureRecognizer. From private/MDCInkGestureRecognizer.h to MDCInkGestureRecognizer.h.MDCNavigationBar.titleAlignmentMDCNavigationBarTitleAlignmentCenterMDCNavigationBarTitleAlignmentLeadingMDCNavigationBarTitleAlignmentMDCNavigationBar.textAlignment. Use titleAlignment instead.Auto-generated by running:
scripts/api_diff -o 1926458f491c928adfb573a6eda38b6d5b5bc55e -n c39811a2344114302327b6fa64d86346bacbea9a
MDCDialogPresentationController.dismissOnBackgroundTapUIViewController (MaterialDialogs)UIViewController.mdc_dialogPresentationControllerMDCSwitch. Removed NSCoding. Added NSSecureCoding.Auto-generated by running:
scripts/api_diff -o 52692216832dc446ae2471bd2f42a40cd8746bbe -n 9ecf191c8d5fa6d8afc7ba119f4cb0ebe926483c
-[MDCFontDiskLoader initWithName:URL:]-[MDCFontDiskLoader registerFont]-[MDCFontDiskLoader setFontName:]-[MDCFontDiskLoader unregisterFont]MDCFontDiskLoader.hasFailedRegistrationMDCFontDiskLoader.isRegisteredAuto-generated by running:
scripts/api_diff -o fb77a9716a80ba4ee2a9f92a81a89335570366e3 -n 8fa99ffb150b99597f19783d54203ff77a4219d2
-[MDCFontDiskLoader initWithName:URL:]. Use initWithFontName:fontURL: instead.-[MDCFontDiskLoader registerFont]. Use load instead.-[MDCFontDiskLoader setFontName:]. Create a new instance if you need to specifiy a different font name.-[MDCFontDiskLoader unregisterFont]. Use unload instead.MDCFontDiskLoader.hasFailedRegistration. Use loadFailed instead.MDCFontDiskLoader.isRegistered. Use loaded instead.Auto-generated by running:
scripts/api_diff -o 51fbbacdf98a1f086cdbf6210f849c8133e91183 -n dd3d2622f6935e70854d3ccb72677b09e19e045a
-[MDCFontDiskLoader initWithFontName:fontURL:]-[MDCFontDiskLoader load]-[MDCFontDiskLoader unload]MDCFontDiskLoader.loadFailedMDCFontDiskLoader.loadedMDCFontDiskLoader.fontName. Removed strong. Added readonly, copy.MDCFontDiskLoader.fontURL. Removed strong, nullable. Added copy, nonnull.-[MDCFontDiskLoader setFontName:].@property (nonatomic, strong, nonnull) NSString *fontName - (void)setFontName:(nonnull NSString *)fontName
+[MDCRobotoFontLoader sharedInstance].+ (nonnull instancetype)sharedInstance + (nonnull MDCRobotoFontLoader *)sharedInstance
Auto-generated by running:
scripts/api_diff -o 6b00b97156fcd8ed5a661c736df6b363cf4c8457 -n 9ef47c149996f078e5f6a4ed3474688e187ab573
Auto-generated by running:
scripts/api_diff -o 5d7ad466b9e1429ad6242272958b149ded34da63 -n 205b1b49fd311af9246133e1499007dec0957e4b
New component.
Auto-generated by running:
scripts/api_diff -o 313365e03bc6f74f43910264ee31d1e2721db36b -n e66a70dc0cd3bb40eb0f4ff3d5867bafba20db3a
No public API changes detected.
Hotfix for Xcode 8.0 beta 3 (8S174q) compilation.
Auto-generated by running:
scripts/api_diff -o 50ed805a58529c8cd3a0bfe56a9b99937134ad2c -n e8dbfebbb20f3d1314b5396e6cc1f76f9d23beb2
No public API changes detected.
Auto-generated by running:
scripts/api_diff -o 0c7bda2e69db44668360b89e3403a7ad9e16c3aa -n 10e4a258fa529178d1aa6ae8962193eb18b43d20
+[MDCAlertAction actionWithTitle:handler:]+[MDCAlertController alertControllerWithTitle:message:]-[MDCAlertController addAction:]MDCActionHandlerMDCAlertAction.titleMDCAlertActionMDCAlertController.actionsMDCAlertController.messageMDCAlertController.titleMDCAlertController-[MDCSpritedAnimationView startAnimatingWithCompletion:].- (void)startAnimatingWithCompletion:(nullable void (^)())completion - (void)startAnimatingWithCompletion:(nullable void (^)(BOOL))completion
isTracking UIControl method (Max Luzuriaga)isTracking UIControl method (Max Luzuriaga)Auto-generated by running:
scripts/api_diff -o c6523eae8e811b1c89d94073b9153a03390b1950 -n edab0db4908985cd0b56003b4341d5f064f98d6a
New component.
Auto-generated by running:
scripts/api_diff -o ec923edf948c5c0ef8cef52f3a3b26a21cbf29d9 -n 34f12cf42f45e30bada83ff6c4c67d5104201a00
No public API changes detected.
New component.
Auto-generated by running:
scripts/api_diff -o bdc034da8700a9cbd6064823dc045b511d622f8c -n f9f6d8e87d6cdaf884ac2d3ad462403bdb2fd008
No public API changes detected.
Auto-generated by running:
scripts/api_diff -o e4b240934cbf7211790e0929c73652dbd7c2f46f -n 55a289f0cfeebdc10931243d613d4cf5bcef3986
| From | To | Kind |
|---|---|---|
Required | Optional | optional |
MDCButtonBar.layoutDirectionMDCButtonBar.items| From | To | Kind |
|---|---|---|
@property (nonatomic, copy) NSArray *items | @property (nonatomic, copy) NSArray<UIBarButtonItem *> *items | declaration |
-[MDCCollectionViewStyling indexPathsForInlaidItems].- (nullable NSArray *)indexPathsForInlaidItems - (nullable NSArray<NSIndexPath *> *)indexPathsForInlaidItems
MDCNavigationBar.layoutDirectionMDCNavigationBar.leadingBarButtonItems| From | To | Kind |
|---|---|---|
@property (nonatomic, copy, nullable) NSArray *leadingBarButtonItems | @property (nonatomic, copy, nullable) NSArray<UIBarButtonItem *> *leadingBarButtonItems | declaration |
MDCNavigationBar.leftBarButtonItems| From | To | Kind |
|---|---|---|
@property (nonatomic, copy, nullable) NSArray *leftBarButtonItems | @property (nonatomic, copy, nullable) NSArray<UIBarButtonItem *> *leftBarButtonItems | declaration |
MDCNavigationBar.rightBarButtonItems| From | To | Kind |
|---|---|---|
@property (nonatomic, copy, nullable) NSArray *rightBarButtonItems | @property (nonatomic, copy, nullable) NSArray<UIBarButtonItem *> *rightBarButtonItems | declaration |
MDCNavigationBar.trailingBarButtonItems| From | To | Kind |
|---|---|---|
@property (nonatomic, copy, nullable) NSArray *trailingBarButtonItems | @property (nonatomic, copy, nullable) NSArray<UIBarButtonItem *> *trailingBarButtonItems | declaration |
| From | To | Kind |
|---|---|---|
@property (nonatomic, copy, nullable) NSArray *leftBarButtonItems | @property (nonatomic, copy, nullable) NSArray<UIBarButtonItem *> *leftBarButtonItems | declaration |
| From | To | Kind |
|---|---|---|
@property (nonatomic, copy, nullable) NSArray *rightBarButtonItems | @property (nonatomic, copy, nullable) NSArray<UIBarButtonItem *> *rightBarButtonItems | declaration |
New component.
New component.
arc lint --everything. Again. (Adrian Secord)arc lint --everything. Again. (Adrian Secord)arc lint --everything. Again. (Adrian Secord)arc lint --everything. Again. (Adrian Secord)arc lint --everything. Again. (Adrian Secord)arc lint --everything. Again. (Adrian Secord)arc lint --everything. Again. (Adrian Secord)arc lint --everything. Again. (Adrian Secord)arc lint --everything. Again. (Adrian Secord)Auto-generated by running:
scripts/api_diff -o 5cea05817470a3fd906dc3663aff5628491e3224 -n 914490127624d9526f24a497021efffddcf3d567
No public API changes detected.
Auto-generated by running:
scripts/api_diff -o a33f87199b2f4e29e35f0b93c75d60520742d5aa -n 0b277c9ff00628400b291d2e6900ff6389b27ecf
-[MDCFontDiskLoader setHasFailedRegistration:]-[MDCFontDiskLoader setIsRegistered:]+[MDCPalette paletteWithTints:accents:]-[MDCPalette initWithTints:accents:]MDCPaletteAccent100NameMDCPaletteAccent200NameMDCPaletteAccent400NameMDCPaletteAccent700NameMDCPaletteTint100NameMDCPaletteTint200NameMDCPaletteTint300NameMDCPaletteTint400NameMDCPaletteTint500NameMDCPaletteTint50NameMDCPaletteTint600NameMDCPaletteTint700NameMDCPaletteTint800NameMDCPaletteTint900NameAuto-generated by running:
scripts/api_diff -o dc74cd290f327e950eab32b48f3105c55972fad9 -n d4a3ac376f5c8498cfb52401f4fbb69d2e318897
New component.
-[MDCFontDiskLoader unregisterFont]MDCFontDiskLoader.hasFailedRegistration. Deprecated setter.MDCFontDiskLoader.isRegistered. Deprecated setter.MDCFontDiskLoader.Added NSCopying.
Material Components for iOS now requires Cocoapods 1.0.0.
Auto-generated by running:
scripts/api_diff -o 0c97c7e25888d9da312c8610e21aa635cf9fb395 -n 1fc92b09a8539cf235667c4b2fb83c0f52578d65
-[MDCRobotoFontLoader init]Auto-generated by running:
scripts/api_diff -o cdbe7e499d85c320c41f31e51cd7cf29c3afed48 -n 636df09ea57a7cdefdacad3f53277c76df968f72
MDCNavigationBar.hidesBackButtonMDCNavigationBar.layoutDirectionMDCNavigationBar.leadingBarButtonItemMDCNavigationBar.leadingBarButtonItemsMDCNavigationBar.leadingItemsSupplementBackButtonMDCNavigationBar.leftBarButtonItemMDCNavigationBar.leftBarButtonItemsMDCNavigationBar.leftItemsSupplementBackButtonMDCNavigationBar.rightBarButtonItemMDCNavigationBar.rightBarButtonItemsMDCNavigationBar.titleMDCNavigationBar.trailingBarButtonItemMDCNavigationBar.trailingBarButtonItemsMDCNavigationBar. Removed MDCUINavigationItemObservables.Auto-generated by running the following while checked out at 4bc99e8ad0fe0ac7e9acc044591a8581165fb5c2:
scripts/api_diff -o 2153f8fa453ecec4dfe48a328e331846d5d37aac -n bbabb375953fbd01c3f818ac9092b55fe56dd9b9
-[MDCAppBarContainerViewController headerViewController]MDCAppBarContainerViewController ()-[MDCButtonBar reloadButtonViews]MDCButtonBar ()MDCButtonBar.buttonItemsMDCButtonBar.delegateMDCButtonBar (Builder). From MDCButtonBar.h to private/MDCButtonBar+Private.h.MDCNavigationBar ()MDCNavigationBar.leftButtonBarDelegateMDCNavigationBar.rightButtonBarDelegateMDCUINavigationItemKVOAuto-generated by running:
scripts/api_diff -o d2f436fdcfa711da5a8a077b42feb052c1abdf9e -n 6c8ca274056aed6850920f6010b47655c67730c9
MDCAppBarAddViews()MDCAppBarParenting.headerStackViewMDCAppBarParenting.headerViewControllerMDCAppBarParenting.navigationBarMDCAppBarParentingMDCAppBarPrepareParent()MDCButtonBar.layoutPositionMDCButtonBarLayoutPositionLeftMDCButtonBarLayoutPositionNoneMDCButtonBarLayoutPositionRightMDCButtonBarLayoutPosition-[MDCCollectionViewController collectionView:didHighlightItemAtIndexPath:]-[MDCCollectionViewController collectionView:didUnhighlightItemAtIndexPath:]-[MDCCollectionViewController collectionView:shouldHighlightItemAtIndexPath:]-[MDCCollectionViewStylingDelegate collectionView:inkColorAtIndexPath:]-[MDCCollectionViewEditingDelegate collectionView:didDeleteItemsAtIndexPaths:]| From | To | Kind |
|---|---|---|
| - (void)collectionView:(nonnull UICollectionView *)collectionView didDeleteItemsAtIndexPaths:(nonnull NSArray *)indexPaths | - (void)collectionView:(nonnull UICollectionView *)collectionView didDeleteItemsAtIndexPaths:(nonnull NSArray<NSIndexPath *> *)indexPaths | declaration |
| From | To | Kind |
|---|---|---|
| - (void)collectionView:(nonnull UICollectionView *)collectionView willDeleteItemsAtIndexPaths:(nonnull NSArray *)indexPaths | - (void)collectionView:(nonnull UICollectionView *)collectionView willDeleteItemsAtIndexPaths:(nonnull NSArray<NSIndexPath *> *)indexPaths | declaration |
| From | To | Kind |
|---|---|---|
| - (void)collectionView:(nonnull UICollectionView *)collectionView didApplyInlayToItemAtIndexPaths:(nonnull NSArray *)indexPaths | - (void)collectionView:(nonnull UICollectionView *)collectionView didApplyInlayToItemAtIndexPaths:(nonnull NSArray<NSIndexPath *> *)indexPaths | declaration |
| From | To | Kind |
|---|---|---|
| - (void)collectionView:(nonnull UICollectionView *)collectionView didRemoveInlayFromItemAtIndexPaths:(nonnull NSArray *)indexPaths | - (void)collectionView:(nonnull UICollectionView *)collectionView didRemoveInlayFromItemAtIndexPaths:(nonnull NSArray<NSIndexPath *> *)indexPaths | declaration |
New component.
Auto-generated by running:
scripts/api_diff -o da19cc89a5bb91c94480aee818d2f0ac52410e1c -n bac6ea73c709e95ac88f202ca6c02e1ab88e91f5
MDCSwitch.offImageMDCSwitch.onImageMDCTypographyFontLoaderAuto-generated by running:
scripts/api_diff -o 037551fa3b17c25f6546d290e41f747e3713bc4f -n 4b6b0a414e599af1fe3a29bba66af8e04ba67b4d
No public API changes.
Auto-generated by running:
scripts/api_diff -o 55afa3aaef67799bdb8a94881f31c5c3b242e9a6 -n fe1ac2f14b7ad4179c84b01590df9c93289f2e36
New component.
New component.
New component.
MDCPageControl. Added UIScrollViewDelegate.Auto-generated by running:
scripts/api_diff -o 1542251633905c3c2089b38f1c01a5010a8894f1 -n 789beeb556aab8b4aeddb71fa837d7db8c4660d7
MDCFontResourceAuto-generated by running:
scripts/api_diff -o 11959487eb429c37b382c521a1c469eac96ed0da -n 7cc87bd6d90ed2c641212339f00f67b08fb76314
+[MDCFloatingButton floatingButtonWithShape:]MDCButton.inkMaxRippleRadiusMDCButton.inkStyleMDCButton.underlyingColorHintMDCButton.uppercaseTitle+[MDCFloatingButton buttonWithShape:]. Use floatingButtonWithShape: instead.MDCButton.shouldCapitalizeTitle. Use uppercaseTitle instead.MDCButton.underlyingColor. Use underlyingColorHint instead.MDCFlexibleHeaderContentImportanceDefaultMDCFlexibleHeaderContentImportanceHighMDCFlexibleHeaderContentImportanceMDCFlexibleHeaderView.headerContentImportanceMDCFlexibleHeaderView.shadowLayer. Removed retain. Added strong.-[MDCInkView evaporateToPoint:completion:]-[MDCInkView evaporateWithCompletion:]-[MDCInkView reset]-[MDCInkView spreadFromPoint:completion:]MDCInkView.clipsRippleToBoundsMDCInkView.fillsBackgroundOnSpreadMDCInkView.gravitatesInk-[MDCInkTouchController inkViewAtTouchLocation:]MDCInkTouchController.defaultInkViewMDCInkTouchController.inkView. To configure ink views before display, use defaultInkView or your delegate's inkTouchController:inkViewAtTouchLocation:. To find an ink view at a particular location, use inkViewAtTouchLocation: instead.MDCRobotoFontLoader. Added MDCTypographyFontLoading.MDCScrollViewDelegateCombining. This component is now available at https://github.com/google/GOSScrollViewDelegateMultiplexer.MDCScrollViewDelegateMultiplexer. This component is now available at https://github.com/google/GOSScrollViewDelegateMultiplexer.Auto-generated by running:
scripts/api_diff -o ddb35150fe10c2974b63d1e29c4ecce4ccaa51fb -n ad904b8748ce469af886b2f27172d8e3c44928e8
-[MDCAppBar addSubviewsToParent]MDCAppBar.headerStackViewMDCAppBar.headerViewControllerMDCAppBar.navigationBarMDCAppBarContainerViewController.appBarMDCAppBar-[MDCAppBarContainerViewController headerViewController] Use appBar.headerViewController instead.MDCAppBarAddViews(). Please create an instance of MDCAppBar instead.MDCAppBarParenting.headerStackView. Please create an instance of MDCAppBar instead.MDCAppBarParenting.headerViewController. Please create an instance of MDCAppBar instead.MDCAppBarParenting.navigationBar. Please create an instance of MDCAppBar instead.MDCAppBarParenting. Please create an instance of MDCAppBar instead.MDCAppBarPrepareParent(). Please create an instance of MDCAppBar instead.-[MDCFlexibleHeaderView shiftHeaderOffScreenAnimated:]MDCFlexibleHeaderView.shiftBehaviorMDCFlexibleHeaderView.behavior Use shiftBehavior instead.MDCFlexibleHeaderView.contentView Please register views directly to the flexible header.arc lint --everything --apply-patches (Jeff Verkoeyen)arc lint --everything --apply-patches (Jeff Verkoeyen)arc lint --everything --apply-patches (Jeff Verkoeyen)arc lint --everything --apply-patches (Jeff Verkoeyen)arc lint --everything --apply-patches (Jeff Verkoeyen)arc lint --everything --apply-patches (Jeff Verkoeyen)arc lint --everything --apply-patches (Jeff Verkoeyen)arc lint --everything --apply-patches (Jeff Verkoeyen)contentView! to contentView. This will be made apparent at build time.-[MDCFlexibleHeaderViewController addFlexibleHeaderViewToParentViewControllerView], MDCFlexibleHeaderParentViewController, and +[MDCFlexibleHeaderViewController addToParent:]. These methods were marked deprecated in 1.0.0. Jeff VerkoeyenComponents
Documentation
[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
Demos
Misc
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
shadowIntensity property, use setShadowLayer:intensityDidChangeBlock: instead. Jeff VerkoeyeninkTouchControllerShouldProcessInkTouches: to inkTouchController:shouldProcessInkTouchesAtTouchLocation:. Chris CoxThis is a template. When cutting a new release, rename “master” to the release number and create a new, empty “Master” section.