最近需要給APP添加手勢左滑返回功能,使用了框架FDFullscreenPopGesture张遭,把使用過程中遇到的坑以及解決方法記錄下
2018-05-03 更新------
當(dāng)使用相機(jī)進(jìn)行拍攝的時(shí)候悠瞬,頁面的上方看不見了陕凹,閃光燈功能使用不了萝映,所以添加了如下判斷:
// 設(shè)置導(dǎo)航的顯示/隱藏
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(CGFLOAT_MIN * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
UIViewController *vc = [self.navigationController.viewControllers lastObject];
// 添加對(duì)相機(jī)拍攝的過濾
if ([self.navigationController isKindOfClass:[UIImagePickerController class]]
) {
UIImagePickerController *imagePickVC = (UIImagePickerController *)self.navigationController;
// 不是相機(jī)才進(jìn)行處理
if (imagePickVC.sourceType != UIImagePickerControllerSourceTypeCamera) {
[self _handleVCNavigationBarHidden:vc];
}
} else {
// 不是相機(jī)才進(jìn)行處理
[self _handleVCNavigationBarHidden:vc];
}
});
- (void)_handleVCNavigationBarHidden:(UIViewController *)vc {
[self.navigationController setNavigationBarHidden:vc.fd_prefersNavigationBarHidden animated:NO];
}
一望忆、UIWebView無法左滑返回
原因:UIWebView默認(rèn)是不開啟左滑手勢返回功能的罩阵,需要自己開啟;
解決:在viewDidLoad
方法里面設(shè)置屬性fd_interactivePopDisabled
為NO
;
- (void)viewDidLoad
{
[super viewDidLoad];
self.fd_interactivePopDisabled = NO;
}
二启摄、UIWebView左滑返回沒有成功時(shí)或者取消返回時(shí)導(dǎo)航欄的title文字為空稿壁,不見了
原因:在viewWillDisappear:
方法里面UIWebView
控件被銷毀了;
ScanWebView = nil;
解決:
方法一: 最直接有效
在viewWillDisappear:
方法里面取消UIWebView
控件的銷毀歉备;即把這行代碼注釋掉傅是;ScanWebView = nil;//注釋掉
方法二: 比較復(fù)雜
在webViewDidFinishLoad:
方法里面用一個(gè)變量保存獲取的title文字,在viewWillAppear:
方法里面設(shè)置導(dǎo)航欄的title文字;
1喧笔、保存title文字的變量
@property (nonatomic, copy) NSString *titleString; //保存title文字的變量
2帽驯、設(shè)置導(dǎo)航欄的title文字
- (void)viewWillAppear:(BOOL)animated{ //設(shè)置導(dǎo)航欄的title文字
[super viewWillAppear:animated];
self.titleLabel.text = self.titleString;
}
3、用變量保存獲取到的title文字
- (void)webViewDidFinishLoad:(UIWebView *)webView{ //用變量保存獲取到的title文字
NSString *title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];
self.titleString = title;
}
三书闸、左滑返回沒有成功或者取消時(shí)尼变,會(huì)出現(xiàn) ... 的情況
原因:導(dǎo)航控制器的導(dǎo)航欄默認(rèn)是有一個(gè)返回按鈕的;設(shè)置屬性hidesBackButton
為YES
就會(huì)出現(xiàn)這種情況浆劲;
解決:設(shè)置屬性hidesBackButton
為NO
嫌术,或者直接注釋掉這行代碼,不進(jìn)行設(shè)置牌借;
self.navigationItem.hidesBackButton = NO;
四蛉威、從無NavigationBar到有NavigationBar,手勢返回的時(shí)候走哺,有NavigationBar的控制器導(dǎo)航欄會(huì)變成白色蚯嫌,或者消失不見了;
原因:在滑動(dòng)的時(shí)候顯示出錯(cuò)
解決:
在viewWillAppear:
和viewWillDisappear:
方法里面添加對(duì)是否隱藏NavigationBar的判斷丙躏;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(CGFLOAT_MIN * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
UIViewController *vc = [self.navigationController.viewControllers lastObject];
if (vc.fd_prefersNavigationBarHidden) {
[self.navigationController setNavigationBarHidden:YES animated:NO];
} else {
[self.navigationController setNavigationBarHidden:NO animated:NO];
}
});
五择示、調(diào)用系統(tǒng)的發(fā)送短信控制器MFMessageComposeViewController
時(shí)(如使用shareSDK進(jìn)行短信分享時(shí)),右上角沒有“取消按鈕”晒旅,無法返回app
原因:好像被擋住了
解決:添加對(duì)控制器是否是MFMessageComposeViewController
的判斷栅盲,是的話添加自己添加一個(gè)取消按鈕并添加方法的實(shí)現(xiàn),
if ([self isKindOfClass:[MFMessageComposeViewController class]]) {
[self fd_pushViewController:viewController animated:animated];
[[self.viewControllers lastObject] navigationItem].rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(dismissModal:)];
return;
}
- (void)dismissModal:(UIButton *)sender{
[[self.viewControllers lastObject] dismissViewControllerAnimated:YES completion:nil];
}
以上為使用過程遇到的坑以及解決辦法废恋,很多也都是從GitHub搜集而來的谈秫,建議多到GitHub去看看;
附上FDFullscreenPopGesture
的GitHub鏈接鱼鼓;
最后貼上在FDFullscreenPopGesture
基礎(chǔ)上修改后的代碼: