| // Copyright 2020-present the Material Components for iOS authors. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #import "MDCFlexibleHeaderView+ShiftBehavior.h" |
| |
| #import <Foundation/Foundation.h> |
| |
| API_DEPRECATED_BEGIN("Use a branded UINavigationController instead.", ios(12, API_TO_BE_DEPRECATED)) |
| |
| /** |
| The flexible header shifter is responsibile for vertical movement of the MDCFlexibleHeaderView. |
| */ |
| __attribute__((objc_subclassing_restricted)) @interface MDCFlexibleHeaderShifter : NSObject |
| |
| #pragma mark - Tracking scroll view |
| |
| /** |
| The scroll view whose content offset affects the shift behavior of the flexible header. |
| |
| The tracking scroll view is weakly held so that we don't unintentionally keep the scroll view |
| around any longer than it needs to be. Doing so could get into tricky situations where the view |
| controller didn't nil out the scroll view's delegate in dealloc and UIScrollView's non-weak |
| delegate points to a dead object. |
| */ |
| @property(nonatomic, weak, nullable) UIScrollView *trackingScrollView; |
| |
| #pragma mark - Behavior |
| |
| /** |
| The behavior of the header's vertical movement. |
| |
| Default: MDCFlexibleHeaderShiftBehaviorDisabled |
| */ |
| @property(nonatomic) MDCFlexibleHeaderShiftBehavior behavior; |
| |
| /** |
| Returns a valid behavior for the current application context. |
| |
| Not all behaviors are usable in all application contexts. In app extensions, for example, it is not |
| possible to adjust the status bar's positioning. This method should be used to adjust a desired |
| behavior to the current context's supported behaviors. |
| |
| @param behavior The shift behavior that was originally desired. |
| @returns If the code is running in an app extension, then |
| MDCFlexibleHeaderShiftBehaviorEnabledWithStatusBar will be returned as |
| MDCFlexibleHeaderShiftBehaviorEnabled. In all other contexts, @c behavior is returned unmodified. |
| */ |
| + (MDCFlexibleHeaderShiftBehavior)behaviorForCurrentContextFromBehavior: |
| (MDCFlexibleHeaderShiftBehavior)behavior; |
| |
| /** |
| Returns YES if the shifter will also hide the status bar when the header is shifting off-screen; |
| returns NO otherwise. |
| */ |
| - (BOOL)hidesStatusBarWhenShiftedOffscreen; |
| |
| @end |
| |
| API_DEPRECATED_END |