自定义HeaderView - 随视图滚动变化1

  • 先梳理一下层级结构
    主要层级结构:


    视图结构.png

    其他层级结构:


    子视图结构.png
  • 注意点:

开发中应该注意,基类应尽量使用UIViewController
如果需要使用UITableViewController,可以在UIViewController上加一个UITableView;
避免使用UITableViewController和UICollectionView
是因为UITableViewController和UICollectionView会限制程序的弹性空间,不便于今后的扩展

  • 细节处理:

1.在控制器B上添加TableView和HeaderView后,由于iOS 7设置导航栏后,为了不影响视图展示,系统会默认帮助我们对视图进行向下偏移,参考链接:
http://www.jianshu.com/p/4cdcfb97704f
所以手动做了如下处理:

    // 设置表格的间隔
    tableView.contentInset = UIEdgeInsetsMake(kHeaderHeight, 0, 0, 0);
    
    // 设置滚动指示器的间距
    tableView.scrollIndicatorInsets = UIEdgeInsetsMake(kHeaderHeight, 0, 0, 0);

2.在控制器A Push到 控制器B后,设置NavigationController为隐藏状态
当返回控制器A时,应避免出现以下导航条融合的现象:


导航条融合.png

所以在控制器A中需要使用:

// [self.navigationController setNavigationBarHidden:NO]; 返回此控制器显示导航条时会融合叠加
[self.navigationController setNavigationBarHidden:NO animated:YES];

3.顶部视图缩放处理:监听偏移量,设置顶部视图高度;通过设置图片填充方式为:ScaleAspectFill,就可以忽略宽度的计算

图片填充模式.png

补充:在设置图片前,手动对图片进行了优化,使图片尺寸刚好为我们UIImageView的尺寸,如果不进行处理,尺寸过大,在返回前一控制器时,就可能会出现图片超出控制器的bug,还需要对图片进行裁切处理(设置clipsToBounds为YES)

放大效果图:


顶部视图滚动放大.gif

4.上拉整体移动+下拉放大代码:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    
    CGFloat offSetY = scrollView.contentOffset.y + scrollView.contentInset.top;
    
    NSLog(@"%f",offSetY);
    
    if (offSetY > 0) {
        NSLog(@"整体移动");
        _headerView.h = kHeaderHeight;
        _headerImageView.h = _headerView.h;
        _headerView.y = - offSetY;
    }else {
        NSLog(@"放大");
        // 调整HeaderView和HeaderImageView
        _headerView.y = 0;
        _headerView.h = kHeaderHeight - offSetY;
        _headerImageView.h = _headerView.h;
    }
}

5.按照上述监听偏移后的处理效果图:


隐藏细节.gif

随着不断向上滚动,顶部视图完全移出屏幕,TableView的第一行完全显示与顶部和状态栏重合

处理:

  • 当视图向上滚动时,让顶部视图最大滚动距离为: 顶部视图高度-64(导航栏高度)

    顶部视图上移细节处理.gif

  • 当视图向上不断滚动时,通过 1 - 偏移量/滚动最大距离计算透明度
    说明:在滚动时,设置的是UIImageView的透明度,而非HeaderView的透明度
    同时这里为了呈现效果更明显,给HeaderView设置了黑色背景色

    顶部透明处理.gif

  • 当顶部视图滚动我们设定的最大距离后,顶部视图已经完全隐藏,而导航栏在Push到控制器B时也做了隐藏处理,所以这里将顶部视图做了仿导航栏的处理

1.将顶部视图HeaderView的背景色设置与导航栏颜色一致
2.给HeaderView添加一根仿导航栏的底部分割线;当顶部视图滚动放大时,需要修改分割线的Y轴坐标(或者透明度也可以)
缺少分割线.png

仿导航栏的底部分割线:


添加分割线.png
  • 状态栏处理:在控制器B中,顶部设置了状态栏为UIStatusBarStyleLightContent样式,当顶部视图滚动透明变化时,当到达一个临界点时,变为UIStatusBarStyleDefault样式
    并且需要我们手动调用setNeedsStatusBarAppearanceUpdate方法来更新状态的变化
//1.声明一个成员变量,用来设置状态栏状态
UIStatusBarStyle    _statusBarStyle;

//2.由于方法执行顺序的关系,所以将此成员变量的初始化放在了init方法中:
- (instancetype)init{
    
    // 设置导航栏
    _statusBarStyle = UIStatusBarStyleLightContent;
    return  [super init];
}

//3.设置状态栏
- (UIStatusBarStyle)preferredStatusBarStyle{
    NSLog(@"%s",__func__);
    return _statusBarStyle;
}
//4.在偏移图像放大时,设置状态栏状态,并手动更新状态
_statusBarStyle = (alpha < 0.5) ? UIStatusBarStyleDefault : UIStatusBarStyleLightContent;
[self.navigationController setNeedsStatusBarAppearanceUpdate];

效果图:


状态栏优化.gif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,444评论 4 365
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,867评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,157评论 0 248
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,312评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,673评论 3 289
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,802评论 1 223
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,010评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,743评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,470评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,696评论 2 250
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,187评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,538评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,188评论 3 240
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,127评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,889评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,741评论 2 274

推荐阅读更多精彩内容