iOS實(shí)現(xiàn)scrollview上拉顯示Navbar下拉隱藏功能詳解
本文主要介紹的是關(guān)于iOS中scrollview上拉顯示Navbar下拉隱藏的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面來看看詳細(xì)的介紹:
動畫效果:

關(guān)于下拉隱藏Nabbar,上拉顯示,有三種方式:推崇第一種,但是做的還是沒簡書、知乎那樣流暢,第一種是對navbar做了平移,第二種,第三種都是隱藏。。
方法如下:
第一種,和第二種處理時(shí)機(jī)一樣,但是效果更好,并沒有處理Navbar 的隱藏。
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
oldY = scrollView.contentOffset.y;
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
if (scrollView.contentOffset.y > oldY) {
[UIView animateWithDuration:0.3 animations:^{
self.navigationController.navigationBar.transform =
CGAffineTransformMakeTranslation(0, -64);
}];
;
}else{
[UIView animateWithDuration:0.3 animations:^{
self.navigationController.navigationBar.transform =
CGAffineTransformIdentity;
}];
}
}
-(void)viewWillDisappear:(BOOL)animated{
self.navigationController.navigationBar.transform = CGAffineTransformIdentity;
}
第二種:在開始拖拽的時(shí)候保存偏移量,結(jié)束拖拽的時(shí)候比較當(dāng)前偏移量,判斷是否隱藏Navbar。
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
oldY = scrollView.contentOffset.y;
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
if (scrollView.contentOffset.y > oldY) {
[CATransaction begin];
[CATransaction setAnimationDuration:1.0];
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
//set the position
[self.navigationController setNavigationBarHidden:YES animated:YES];
[CATransaction commit];
;
}else{
[CATransaction begin];
[CATransaction setAnimationDuration:1.0];
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
[self.navigationController setNavigationBarHidden:NO animated:YES];
[CATransaction commit];
}
}
第三種: 是根據(jù)拖拽的velocity進(jìn)行判斷,很霸道但是效果不如第一種,,隱藏的時(shí)機(jī)不對你可以做個(gè)比較;
-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
if(velocity.y>0)
{
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
else
{
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
}
最后選擇合適的時(shí)候恢復(fù)Navbar 的狀態(tài),建議放在viewWillDisappear里,否則在進(jìn)入下一個(gè)頁面里很突兀。
-(void)viewWillDisappear:(BOOL)animated{
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家腳本之家的支持。
相關(guān)文章
詳解iOS App中UISwitch開關(guān)組件的基本創(chuàng)建及使用方法
UISwitch組件就是我們平時(shí)在iOS設(shè)置菜單中開到的那種左右滑動的開關(guān)按鈕,當(dāng)然我們在開發(fā)時(shí)可以進(jìn)行更多的自定義,這里我們就來詳解iOS App中UISwitch開關(guān)組件的基本創(chuàng)建及使用方法2016-05-05
iOS Xcode升級Xcode15報(bào)錯SDK does not contain
這篇文章主要為大家介紹了iOS Xcode 升級Xcode15報(bào)錯: SDK does not contain 'libarclite'解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
Objective-C的UIStackView常用屬性函數(shù)學(xué)習(xí)筆記
這篇文章主要為大家介紹了Objective-C的UIStackView常用屬性函數(shù)學(xué)習(xí)筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
iOS11.3以下modal中input光標(biāo)錯位的解決方法
這篇文章主要介紹了iOS11.3以下modal中input光標(biāo)錯位的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
iOS調(diào)試Block引用對象無法被釋放的小技巧分享
這篇文章主要給大家分享介紹了關(guān)于iOS調(diào)試Block引用對象無法被釋放的小技巧,文中通過示例代碼介紹的非常詳細(xì),對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
MacOS無法掛載NFS Operation not permitted錯誤解決辦法
這篇文章主要介紹了MacOS無法掛載NFS Operation not permitted錯誤解決辦法的相關(guān)資料2017-02-02

