美文网首页环信iOS Developer
iOS 下拉上划导航栏变化处理详解 + 头视图放大

iOS 下拉上划导航栏变化处理详解 + 头视图放大

作者: 带你去旅行 | 来源:发表于2017-02-24 14:31 被阅读1060次
    效果图

    导航栏剖析图

    这种方法确实可以做到可以使导航栏透明及没有那根线

    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.shadowImage = [UIImage new];

    1)我们设置的是BackgroundImage,说明也许在我们的navigationBar上有一个ImageView的子视图,而我们的看到的导航栏实际上看到的就是这个图片,因此设置它为无图片我们就可以看到透明,而设置backgroundColor却不行。

    2)我们还设置了shadowImage为无图,它其实就是导航栏下面的那根细线,如果你不写第二句话你则会看到一根线。

    其实只需写这两句话就可以做到导航栏透明

    _barImageView=self.navigationController.navigationBar.subviews.firstObject;

    _barImageView.alpha = 0;

    取出导航栏的背景,设置为透明即可。但是想做到下拉上划渐变的效果当然不可能只写这两句。

    再根据代理方法计算出高度变化

    -(void)scrollViewDidScroll:(UIScrollView*)scrollView{

    CGFloatminAlphaOffset = -64;

    CGFloatmaxAlphaOffset =64;

    CGFloatoffset = scrollView.contentOffset.y;

    CGFloatalpha = (offset - minAlphaOffset) / (maxAlphaOffset - minAlphaOffset);

    NSLog(@"滑动- %f - %f",alpha,offset);

    _barImageView.alpha= alpha;//导航栏透明度变化

    0 — - >> 1  导航栏颜色变深

    1 - - >> 0  导航栏颜色逐渐透明

    }

    !!!!!!!!!重点!!!!!!!!!

    如果想在tableview下拉后,在底部有背景图有两种方法(类似于qq下拉后有又【由xx技术支持】、某个图片等等)

    1:设置MineTableView.backgroundColor = [UIColor clearColor];背景透明,

    再把图片直接加载在self.view上

    2:或者直接把图片加载在MineTableView.backgroundView上。


    下拉头视图放大

    1.加载到_ZLTableView上

    1)初始化TableView,如果需求是导航栏需要透明切上划透明度变化时,可以参照上面的方法。

    2)_ZLTableView.contentInset = UIEdgeInsetsMake(200, 0, 0, 0);把cell的显示往下移动,给头部视图预留位置。

    HeadIcon.contentMode = UIViewContentModeScaleAspectFill;设置图片的拉伸

    下拉的时候,只需设置图片高度变化,宽度会根据拉伸自动变化。

    2.直接加载在_ZLTableView.tableHeaderView上

    _ZLTableView.tableHeaderView = 图片

    视图放大的代码就在这里面实现

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView

    {

    放在tableview上的直接根据高度变化改变即可。

    放在tableHeaderView上的改变

    }

    }


    相关文章

      网友评论

      • CodeLuck:你好,有demo吗
        带你去旅行:有demo 不过重要的代码就几十行 我直接复制给你吧

        _barImageView = self.navigationController.navigationBar.subviews.firstObject;


        -(void)scrollViewDidScroll:(UIScrollView *)scrollView
        {

        CGFloat minAlphaOffset = -64;
        CGFloat maxAlphaOffset = 64;
        CGFloat offset = scrollView.contentOffset.y;
        CGFloat alpha = (offset - minAlphaOffset) / (maxAlphaOffset - minAlphaOffset);
        NSLog(@"滑动 - %f - %f",alpha,offset);
        #if DEMO == 1

        if (offset < -64 * 2) {

        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
        //标题颜色
        self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : [UIColor whiteColor]};
        //导航栏子控件颜色
        self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

        }else{

        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];

        //标题颜色
        self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : [UIColor blackColor]};
        //导航栏子控件颜色
        self.navigationController.navigationBar.tintColor = [UIColor blackColor];

        }

        #endif

        _barImageView.alpha = alpha;
        }

      本文标题:iOS 下拉上划导航栏变化处理详解 + 头视图放大

      本文链接:https://www.haomeiwen.com/subject/zyaiwttx.html