在優(yōu)化側(cè)滑返回時(shí)蹬癌,我嘗試了很多方法捻勉,期間參考了不少資料镀梭,最后找到適合自己的方式。完全自定義導(dǎo)航的方式除外踱启。
全部頁面使用同一個(gè)返回按鈕時(shí)报账,如果想要自定義其他頁面的返回事件,那么建議采用設(shè)置leftBarButtonItem的方式禽捆,并設(shè)置backBarButtonItem的標(biāo)題為空笙什,且隱藏;如果不需要自定義goBack的返回事件胚想,僅僅是更改返回按鈕的樣式琐凭,建議采用backBarButtonItem的方式。
設(shè)置leftBarButtonItem:
UIBarButtonItem *leftItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"back"] style:UIBarButtonItemStylePlain target:self action:@selector(goBack)];
leftItem.title = @"";
self.navigationItem.leftBarButtonItem = leftItem;
這一種設(shè)置方式浊服,不知道為什么我在測(cè)試的時(shí)候统屈,當(dāng)設(shè)置navigationBar.translucent為YES時(shí)胚吁,在極少數(shù)的情況下會(huì)出現(xiàn)leftBarButtonItem從原位置向下偏移;但采用initWithCustomView的方式就不會(huì)出現(xiàn)這樣的情況愁憔。私以為這是一個(gè)很神奇的事情腕扶,如果有知道原因的,請(qǐng)一定要告訴我吨掌。
我最后使用的是設(shè)置leftBarButtonItems的方式半抱,可以調(diào)整返回按鈕距離左側(cè)的位置。
UIBarButtonItem *spaceItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:self action:nil];
//spaceItem寬度為負(fù)值膜宋,相當(dāng)于左移
spaceItem.width = -23;
// 初始化一個(gè)返回按鈕
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
// 為返回按鈕設(shè)置圖片樣式
[button setImage:[[UIImage imageNamed:@"back"] imageWithRenderingMode:UIImageRenderingModeAutomatic] forState:UIControlStateNormal];
// 設(shè)置返回按鈕觸發(fā)的事件
[button addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
// 初始化一個(gè)BarButtonItem窿侈,并將其設(shè)置為返回的按鈕的樣式
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItems = @[spaceItem,backButton];
設(shè)置backBarButtonItem:
[self.navigationController.navigationBar setBackIndicatorImage:[UIImage imageNamed:@"back"]];
[self.navigationController.navigationBar setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"back"]];
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:nil];
backItem.title = @"";
self.navigationItem.backBarButtonItem = backItem;
我在項(xiàng)目中使用TZScrollViewPopGesture來實(shí)現(xiàn)側(cè)滑返回,但其中某些方面未能達(dá)到想要的效果秋茫,因此對(duì)其進(jìn)行了修改:
1.在不影響其他頁面?zhèn)然祷氐幕A(chǔ)上史简,使特定頁面不支持側(cè)滑返回;
2.可設(shè)置導(dǎo)航的透明度肛著;
3.側(cè)滑返回時(shí)圆兵,透明導(dǎo)航和不透明導(dǎo)航之間的平滑返回;
在使用中枢贿,設(shè)置hh_navBgColor時(shí)殉农,使用的是RGB的顏色值,否則在通過導(dǎo)航的背景色萨咕,去改變透明度時(shí)统抬,在重新獲取rgb的顏色值時(shí),會(huì)造成取值不準(zhǔn)確的問題危队。
當(dāng)特定頁面不需要支持側(cè)滑返回時(shí)聪建,在viewWillAppear設(shè)置self.navigationController.hh_supportLeftBack = NO;就可以了。但要注意其他支持側(cè)滑的頁面同樣需要在在viewWillAppear設(shè)置self.navigationController.hh_supportLeftBack = YES;
github地址:https://github.com/HannahZheng/HHNavigationconSupportLeftBack
參考:
https://juejin.im/entry/57fcd57a67f356005886e867
http://www.cocoachina.com/ios/20161008/17695.html
http://www.cocoachina.com/ios/20161008/17695.html
http://www.reibang.com/p/fddc4ee4bc1f