UITableView中headerView视察滚动的简单实现

简单思路:实例一个UIScrollView,在scrollView上添加两个UIView, 为scrollView添加观察者,观察scrollView的contentOffset属性.

当偏移量改变时,改变UIView视图的坐标.

示例代码:

@interface RootViewController ()

@property (nonatomic, copy) UIScrollView *scrollView;
@property (nonatomic, copy) UIView *headView;
@property (nonatomic, copy) UIView *headView2;

@end

@implementation RootViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    // 创建一个UIScrollView
    _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(10, 20, 300, 440)];
    [self.view addSubview:_scrollView];
    _scrollView.backgroundColor = [UIColor orangeColor];
    _scrollView.contentSize = CGSizeMake(0, 2000);
    _scrollView.delegate = self;
    // 创建两个UIView并添加到scrollView上
    _headView = [[UIView alloc] initWithFrame:CGRectMake(0, 200, 300, 50)];
    [_scrollView addSubview:_headView];
    _headView.backgroundColor = [UIColor grayColor];

    _headView2 = [[UIView alloc] initWithFrame:CGRectMake(0, 800, 300, 40)];
    [_scrollView addSubview:_headView2];
    _headView2.backgroundColor = [UIColor colorWithRed:0.255 green:0.718 blue:1.000 alpha:1.000];
    //为scrollView添加观察者
    [_scrollView addObserver:self forKeyPath:@"contentOffset" options:(NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew) context:@"headView"];

}

// 被观察者的属性发生变化就调用此方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (context == @"headView") {
        if ((_scrollView.contentOffset.y > 200 && _scrollView.contentOffset.y <= 760)) {
            _headView.frame = CGRectMake(0, _scrollView.contentOffset.y, 300, 50);
        }
        if (_scrollView.contentOffset.y >= 760 && _scrollView.contentOffset.y <= 800.0) {
            float y = 760;
            _headView.frame = CGRectMake(0, y, 300, 50);
        }
        if (_scrollView.contentOffset.y >= 800) {
            _headView2.frame = CGRectMake(0, _scrollView.contentOffset.y, 300, 40);
        }
    }
    else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}
@end 

基本实现了效果,如果有什么错误或者更好的想法,欢迎指正.

UITableView中headerView视察滚动的简单实现

时间: 2024-11-03 21:20:25

UITableView中headerView视察滚动的简单实现的相关文章

UITableView中的headerView改变颜色

UITableView中的headerView 默认颜色是灰色的 如果自定义headerView必须在headerview上加一个view作为添加的颜色 或者直接 -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 写view 改变view的颜色

视察滚动

需求: 这几天做新网站要用到视察滚动,我起初去鑫大大那找了一个插件parallax ,最后发现不合适,这个只能做一些大图层的变换,而且要将一些小的元素也滚动的话,用parallax特别不方便. 然后再搜,发现一个新的叫SuperScrollorama,但是里面要加载的资源很多,需求是 只需要变化元素,pass,继续找. 直到找到有一篇文章 http://jonathannicol.com/blog/2011/08/06/build-a-parallax-scrolling-website-int

页面中的平滑滚动——smooth-scroll.js的使用

正常的本页面锚链接跳转的时候跟PPT似的,特别生硬,用户体验非常差. 这时候我们就可以借助smooth-scroll.js这个插件,来实现本页面的平滑的跳转. 1首先,导入必须的JS文件 <script src="js/jquery-1.10.2.js"></script> <script src="js/jquery.smooth-scroll.min.js"></script> <script src=&qu

scrollView中可以自由滚动的listview

直接在scrollView中写listview等可滚动控件会出现子控件高度计算的问题,为了解决这个问题,找到的方案是重写listview中的onmeasure方法: @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >> 2, MeasureSpec.AT_MO

iOS中tableview中headerview总保持在屏幕上方和随着屏幕滑动一起移动至消失

1 : tableview中headerview总保持在屏幕上方 :  在代理方法中创建view,并添加到headerview上 l例子: - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { if ([self.title isEqualToString:@"幕后"]) { NSArray *array = @[@"全部",@"

UITableView中cell边框和背景设置最佳方案

UITableView是iOS开发中最常用的视图控件,在平常用的iOS App中大部分都用到了UITableView. 需求很简单,就是在一个UITableView里面实现一个不一样的UITableViewCell,如下图里的“切换账号”按钮 正常情况下grouped样式(UITableViewStyleGrouped)UITableViewCell都是有边框的,所以如果只是用addSubView添加一个按钮的话,就会有边框在外面,不符合要求,也想过用一个大的图片,把这个cell给盖住,但是感觉

Kubernetes集群中Service的滚动更新

Kubernetes集群中Service的滚动更新 二月 9, 2017 0 条评论 在移动互联网时代,消费者的消费行为已经"全天候化",为此,商家的业务系统也要保持7×24小时不间断地提供服务以满足消费者的需求.很难想像如今还会有以"中断业务"为前提的服务系统更新升级.如果微信官方发布公告说:每周六晚23:00~次日凌晨2:00进行例行系统升级,不能提供服务,作为用户的你会怎么想.怎么做呢?因此,各个平台在最初设计时就要考虑到服务的更新升级问题,部署在Kubern

Hibernate中,基于Annotation的简单树形结构的实现

在系统设计中,经常用到递归性质的树形结果,比如菜单.多级分类等,一般是在同一个表中定义父子关系实现这种结构. 下面是在Hibernate中,基于Annotation的简单树形结构的实现: 第一步:创建Entity类,并添加注解实现关联关系    ps: 主要是利用@ManyToOne 和 @OneToMany 配置在同一个Entity类中实现树形递归的结构.hibernate注解形式比在xml配置更加简洁 TreeNode.java 1 package com.hfut.hibernate; 2

Collections中sort()方法源代码的简单分析

Collections的sort方法代码: public static <T> void sort(List<T> list, Comparator<? super T> c) { Object[] a = list.toArray(); Arrays.sort(a, (Comparator)c); ListIterator i = list.listIterator(); for (int j=0; j<a.length; j++) { i.next(); i.