YIFullScreenScroll 1.4.0
Pinterest-like scroll-to-fullscreen UI for iOS5+ (including iOS7).
Architecture
-
To achieve scroll-to-fullscreen behavior,
YIFullScreenScroll
uses JRSwizzle to extendUIViewController
's functionality, and KVO (Key-Value-Observing) instead of conforming toUIScrollViewDelegate
for easiler implementation. -
YIFullScreenScroll
enables/disables its functionality whenviewWillAppear
orviewWillDisappear
is called. This means, fullscreen will not continue to the next pushed (2nd) viewController, and if you want to keep it, you also need to setupself.fullScreenScroll
to the 2nd viewController'sviewDidLoad
. -
YIFullScreenScroll
can only handle UINavigationController/UITabBarController's top & bottom UI-bars as default. To further adjust your custom UI-bar's layout, use-fullScreenScrollDidLayoutUIBars:
delegate method (see Issue #12 for more detail).
CocoaPods
Install viapod 'YIFullScreenScroll'
How to use
- (void)viewDidLoad
{
[super viewDidLoad];
self.fullScreenScroll = [[YIFullScreenScroll alloc] initWithViewController:self scrollView:self.tableView style:YIFullScreenScrollStyleFacebook];
self.fullScreenScroll.delegate = self;
self.fullScreenScroll.shouldShowUIBarsOnScrollUp = NO;
// self.fullScreenScroll.shouldHideNavigationBarOnScroll = NO;
// self.fullScreenScroll.shouldHideToolbarOnScroll = NO;
// self.fullScreenScroll.shouldHideTabBarOnScroll = NO;
}
// implement below to further adjust your custom UI-bar's layout
- (void)fullScreenScrollDidLayoutUIBars:(YIFullScreenScroll*)fullScreenScroll
{
CGRect newFrame = self.customBar.frame;
// Grab navigationBar's frame using UIView's converting method e.g. -convertRect:toView: to adjust your customView's position on your own.
newFrame.origin.y = ...
self.customBar.frame = newFrame;
}
Style
typedef NS_ENUM(NSInteger, YIFullScreenScrollStyle) {
YIFullScreenScrollStyleDefault, // no statusBar-background when navBar is hidden
#if defined(__IPHONE_7_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_7_0
YIFullScreenScrollStyleFacebook, // like facebook ver 6.0, remaining navBar for statusBar-background in iOS7
#endif
};
UISearchDisplayController issue
If you are using UISearchDisplayController
in iOS7, there is a searchBar-bug that doesn't respond to touches when you slightly scrolled down (about searchBar height) and then activate searchDisplayController. To prevent it, call below method on -searchBarShouldBeginEditing:
.
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
// NOTE: this code is needed for iOS7
[self.fullScreenScroll adjustScrollPositionWhenSearchDisplayControllerBecomeActive];
return YES;
}
Dependencies
License
YIFullScreenScroll
is available under the Beerware license.
If we meet some day, and you think this stuff is worth it, you can buy me a beer in return.