iOS Swift&OC 模仿主流App 实现滑动视图隐藏导航栏

简单直接上图上代码 -.- 一个GIF图5M?

@property (nonatomic, strong) UITableView *tableViewScroll;
@property (nonatomic, assign) double recordDistance; //记录滑动的距离
@property (nonatomic, strong) UIView *customView;
@property (nonatomic, strong) UIButton *btn;

创建所需要的视图

- (UITableView *)tableViewScroll
{
    if (_tableViewScroll == nil) {
        _tableViewScroll = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, screenHeight) style:UITableViewStylePlain];
        _tableViewScroll.delegate = self;
        _tableViewScroll.dataSource = self;
        [_tableViewScroll registerClass:[UITableViewCell class] forCellReuseIdentifier:cellIdentifier];
    }
    return _tableViewScroll;
}
- (UIView *)customView
{
    if (_customView == nil) {
        _customView = [[UIView alloc] initWithFrame:CGRectMake(0, 44, screenWidth, 30)];
        _customView.backgroundColor = [UIColor lightGrayColor];
    }
    return _customView;
}
- (UIButton *)btn
{
    if (_btn == nil) {
        _btn = [UIButton buttonWithType:UIButtonTypeCustom];
        _btn.frame = CGRectMake(screenWidth - 70, 5, 40, 20);
        [_btn setTitle:@"关注" forState:UIControlStateNormal];
        _btn.titleLabel.font = [UIFont systemFontOfSize:13];
        _btn.backgroundColor = [UIColor greenColor];
    }
    return _btn;
}

关键在于scrollView协议方法中的处理

// Objective-C
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    // 记录滑动距离
    self.recordDistance = scrollView.contentOffset.y;
    NSLog(@"histroy_y ======== %lf", self.recordDistance);
}
// Swift
func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
        self.recordDistance = scrollView.contentOffset.y
    }
// Objective-C
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSLog(@"y ======= %lf", scrollView.contentOffset.y);
    scrollView.contentOffset.y > self.recordDistance ? scrollView.contentOffset.y < self.recordDistance ? [self.navigationController setNavigationBarHidden:NO animated:YES]:[self.navigationController setNavigationBarHidden:YES animated:YES] : [self.navigationController setNavigationBarHidden:NO animated:YES];
}
// Swift
func scrollViewDidScroll(scrollView: UIScrollView) {
        scrollView.contentOffset.y > self.recordDistance ? scrollView.contentOffset.y < self.recordDistance ? self.navigationController?.setNavigationBarHidden(false, animated: true):self.navigationController?.setNavigationBarHidden(true, animated: true) : self.navigationController?.setNavigationBarHidden(false, animated: true);
    }

省略了tableview相关的代码

在viewDidload中

    [self.view addSubview:self.tableViewScroll];
    [self.navigationController.navigationBar addSubview:self.customView];
    [self.customView addSubview:self.btn];
    self.title = @"这是一个测试页";
    self.navigationController.navigationBar.barTintColor = [UIColor lightGrayColor];

觉得还可以请点个赞, 我要申请微博加V. 点个赞吧客官 -.- 哈哈哈

时间: 2024-10-24 05:54:52

iOS Swift&OC 模仿主流App 实现滑动视图隐藏导航栏的相关文章

iOS 滑动隐藏导航栏-三种方式

/** 1隐藏导航栏-简单- */    self.navigationController.hidesBarsOnSwipe = YES; /** 2隐藏导航栏-不随tableView滑动消失效果 *///- (void)scrollViewDidScroll:(UIScrollView *)scrollView {//    //scrollView已经有拖拽手势,直接拿到scrollView的拖拽手势//    UIPanGestureRecognizer *pan = scrollVie

微信小程序tab切换,可滑动切换,导航栏跟随滚动实现

引用:https://www.cnblogs.com/till-the-end/p/8935152.html 简介 看到今日头条小程序页面可以滑动切换,而且tab导航条也会跟着滚动,点击tab导航,页面滑动,切导航栏也会跟着滚动,就想着要怎么实现这个功能 像商城类商品类目如果做成左右滑动切换类目用户体验应该会好很多,我这里只是一个小demo,没有怎么去考虑数据的问题,主要是想着去实现这么个功能,有可能后期引入数据后会出现问题,欢迎提出互相讨论 解决过程 1.在想要实现这个问题的时候找了不少别人的

滑动隐藏导航栏的设置

今天无意之中学习一个项目,学到一个大的知识点,在这里和大家分享一下: 1. 滑动隐藏导航栏的设置: @property (nonatomic, readwrite, assign) BOOL hidesBarsOnSwipe NS_AVAILABLE_IOS(8_0) __TVOS_PROHIBITED; self.hidesBarsOnSwipe = YES; 2. // 去掉导航分割线 [self.navigationBar setBackgroundImage:[[UIImage allo

记录一下本应用《任您记)APP项目中点击底部导航栏四个按钮,则界面颜色跟着变化及图标字放大效果

底部导航栏四个按钮代表四个颜色,点其中其中一个按钮,则换一种颜色,颜色代码和图标都保存在相应的数组里,具体如下: 使用的开源库是:LuseenBottomNavigation本应用<任您记)APP项目中用法是依赖:compile 'com.github.armcha:LuseenBottomNavigation:1.8.2' 主要代码: if (bottomNavigationView != null) {bottomNavigationView.isWithText(false);bottom

根据浏览器的滑动条 固定导航栏

固定导航栏 前言:很多网站都有这种网页的效果:滑动浏览器右侧的滚动条,导航栏会一直处于最上方 下面我就来简单实现以下这个功能 一.首先我们来写一下html的结构: 1 <div class="top" id="top"></div> 2 <div class="nav" id="nav"></div> 3 <div class="main" id=&qu

iOS隐藏导航栏底部灰线

首先创建 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #de38a5 } span.s1 { } span.s2 { color: #ffffff } @interface TestVC() p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #ffffff } p.p2 { margin: 0.0px 0.0px 0.0px

iOS解决隐藏导航栏后,打开照片选择器后导航栏不显示的问题以及更换导航栏背景色

问题描述: 遇到一种情况,在一个控制器上(隐藏了导航栏),打开照片选择器 UIImagePickerController后,照片选择器头部一片空白,且上滑相册时,信息会有错乱效果. 原因分析: 通过查看层次图,发现导航栏其实有的,那么问题是因为导航栏透明了导致的 解决办法: UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.sourceT

ios显示或隐藏导航栏的底线

根据产品需求要求把这个界面导航栏的底线去掉,下个控制器还需要有底线. 使用下面的代码实现 //在页面出现的时候就将黑线隐藏起来 -(void)viewWillAppear:(BOOL)animated { [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; [self.navigationController.navigation

iOS 优雅地隐藏导航栏NavigationBar (Objc)

@interface FSViewController () <UINavigationControllerDelegate> @end @implementation FSViewController #pragma mark - lifeCycle - (void)viewDidLoad { [super viewDidLoad]; // 设置导航控制器的代理为self self.navigationController.delegate = self; } // 将要显示控制器 #pra