iOS_UICollectionView上滑隱藏下滑顯示導(dǎo)航欄(純代碼)

1.概述

其實(shí)這個(gè)不是我目前項(xiàng)目里面需要的, 昨晚睡覺之前突然想到實(shí)現(xiàn)以下應(yīng)該不錯(cuò), 雖然暫時(shí)沒什么卵用, 但多幾個(gè)卵也是一種戰(zhàn)略儲(chǔ)備.

目前這種設(shè)計(jì)在知乎等這種閱讀類的APP里面用的比較多, 或者新聞購(gòu)物類的, 總之就是可以提供沉浸式閱讀體驗(yàn)或者沉浸式購(gòu)物體驗(yàn)啥的, 這些華麗的辭藻在猿類腦海里都沒啥改變吧(我覺得), 在我們看來腦海里第一個(gè)想到的就是"臥槽這咋實(shí)現(xiàn)的啊????"

上滑隱藏下滑顯示導(dǎo)航欄.gif

網(wǎng)上有很多類似的實(shí)現(xiàn)效果, 我這里也只是個(gè)人興趣來弄一下, 至于那種說"偷"的, 我只想說"程序猿的事, 怎么能叫偷呢!!!"

2. 實(shí)現(xiàn)思路

大致的實(shí)現(xiàn)思路是在UICollectionViewDelegate的方法里, 通過判斷滑動(dòng)的方向來決定navigationController的顯示和隱藏

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset

還是那句話, 能用代碼說明的東西就不要瞎逼逼. 看下面的代碼吧

3.代碼

3.1 創(chuàng)建和配置項(xiàng)目
demo是純代碼實(shí)現(xiàn)的, 為了有個(gè)能演示的導(dǎo)航欄, 所以刪除了創(chuàng)建項(xiàng)目時(shí)候自帶的ViewController文件, 并且在項(xiàng)目的general里面刪除了main; 然后創(chuàng)建了一個(gè)OneViewController文件.

3.2 AppDelegate.m文件里


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   
    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];
    
    OneViewController *oneVC = [[OneViewController alloc] init];
    UINavigationController *nvgVC = [[UINavigationController alloc]initWithRootViewController:oneVC];
    
    self.window.rootViewController = nvgVC;
    
    [self.window makeKeyAndVisible];
    
    
    return YES;
}

3.3 OneViewController文件里
.h文件里就沒有啥了;

.m文件里:

#import "OneViewController.h"


@interface OneViewController ()<UICollectionViewDelegate, UICollectionViewDataSource>

@property (nonatomic, weak) UICollectionView *collectionView;

@end

static NSString *const cellID = @"cellID";

@implementation OneViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.title = @"最帥的男人";
    
    // 設(shè)置layout
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    CGFloat itemsW = (self.view.frame.size.width - 5*3) /4;
    layout.itemSize = CGSizeMake(itemsW, itemsW + 40);
    layout.minimumLineSpacing = 5;
    layout.minimumInteritemSpacing = 5;
   
    // 設(shè)置collectionView
    UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout];
    collectionView.delegate = self;
    collectionView.dataSource = self;
    [self.view addSubview:collectionView];
    self.collectionView = collectionView;
    // 注冊(cè)cell
    [collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:cellID];
    
}

# pragma mark - UICollectionViewDataSource
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{

    return 1;
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{

    return 300;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
    if (cell == nil) {
        cell = [[UICollectionViewCell alloc] init];
    }
    
    cell.backgroundColor = [UIColor whiteColor];
    
    return cell;
    
}


# pragma mark - UICollectionViewDelegate
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{

    /*
     通過判斷滑動(dòng)的方向來決定navigationController的顯示和隱藏
     */
    if(velocity.y>0){
        
        [self.navigationController setNavigationBarHidden:YES animated:YES];
        
    }else{
        
        [self.navigationController setNavigationBarHidden:NO animated:YES];
        
    }
    
}
@end

到這里, 圖片里的效果就算完成了. 超級(jí)簡(jiǎn)單;
但是, 這只是一個(gè)簡(jiǎn)單的demo而已, 在項(xiàng)目中使用起來這個(gè)效果的話, 要考慮的東西可能就多很多了, 比如根據(jù)手指是否離開屏幕的時(shí)候來顯示還是屏幕滑動(dòng)停止后才顯示等等這些問題, 都是要自己實(shí)現(xiàn)思考一下的, 我個(gè)人提示是根據(jù)UICollectionViewDelegate的幾個(gè)方法入手, 先搞清楚這幾個(gè)方法的使用尤其是返回的參數(shù)意義, 這幾個(gè)方法這里就不贅述了.

end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,316評(píng)論 25 708
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實(shí)...
    香橙柚子閱讀 24,814評(píng)論 8 183
  • 選擇對(duì)的行業(yè)比選擇公司更重要。 “女怕嫁錯(cuò)郎,男怕入錯(cuò)行?!闭f的也是這個(gè)道理。 站在風(fēng)口豬都能飛起來。找到有發(fā)展?jié)?..
    翠霞_0256閱讀 309評(píng)論 2 1
  • 一、創(chuàng)造性 結(jié)構(gòu)性 意義性 指代性 社會(huì)性與個(gè)體性 瑣碎時(shí)間那么多那么多為啥不用呢為啥不用呢?。。。?! 每一樣都是...
    空氣里的貓閱讀 901評(píng)論 0 0
  • 今天下午和兒子倆一起去遊樂場(chǎng)玩,兒子終於等到自己1米3了,拉起我就衝去玩過山車。 過山車開始啟動(dòng)了...
    精尚閱讀 209評(píng)論 0 0

友情鏈接更多精彩內(nèi)容