本文主要介绍如何实现当UIScrollview滑动时,自动隐藏和显示标题栏的效果。其中布局采用Autolayout的方式,并且为了代码精简,使用了第三方库Masonry,其使用参考【iOS-Masonry学习笔记】。使用它的原因是可以很好的结合动画效果的实现!
一、布局
首先我们来介绍一下整个布局。最外层的是一个UIScrollview(mainScrollview),其子视图包括一个模拟标题栏的UIView视图,以及一个UIScrollview视图(innerScrollview),并且其是按顺序上下排列的。其中的innerScrollview包含一个UIView容器子视图,并且该容器中包括若干个UIView子视图来模拟cell。其显示效果大致如下:
1.1 常量设置
//屏幕宽度
#define UIScreenWidth [[UIScreen mainScreen] bounds].size.width
//屏幕高度
#define UIScreenHeight [[UIScreen mainScreen] bounds].size.height
//标题栏高度
NSInteger const titleHeight = 100;
//每个cell高度
NSInteger const cellHeight = 80;
//触发标题栏隐藏和显示事件的scrollview在Y方向上的滑动位移阈值
NSInteger const triggerToHideY = 200;
1.2 视图初始化
整个布局的视图属性并不多,主要是一下这些。其中cells数组用于存储添加到container中的子UIView视图,以便于此后的视图约束设置。还有一个属性isHide是用来表示标题的状态的,如果标题隐藏则为YES,反之为NO,默认值为NO;
@property (strong, nonatomic) UIScrollView *mainScrollview;
@property (strong, nonatomic) UIView *hideView;
@property (strong, nonatomic) UIScrollView *innerScrollview;
@property (strong, nonatomic) UIView *container;
@property (strong, nonatomic) NSMutableArray *cells;
@property (nonatomic) BOOL isHide;
接下来则是手动初始化各个视图对象,并设置它们的父子关系。
- (void)viewDidLoad {
[super viewDidLoad];
//设置默认值
self.isHide = NO;
//初始化cells数组
self.cells = [