(IOS)h5頁面自帶導(dǎo)航欄情況下給WebView添加預(yù)加載導(dǎo)航欄

h5頁面自帶導(dǎo)航欄情況下卵洗,在h5頁面還沒有加載出來之前,頁面是空白的十绑,這樣很尷尬酷勺,用戶體驗非常差,如果加載非常慢或者加載失敗的情況下甚亭,會一直處于空白頁中击胜,無法返回。

解決方案有:1.利用原生導(dǎo)航偶摔,2.h5添加預(yù)加載頁面和錯誤頁面辰斋,3自定義當(dāng)航欄

經(jīng)過嘗試,我發(fā)現(xiàn)1宫仗,2兩種方案都有一定的弊端锰什,所以我選擇了第三種方案自定義預(yù)加載當(dāng)航欄丁逝。

首先自定義一個BaseWebController

.h

#import "BaseViewController.h"

NS_ASSUME_NONNULL_BEGIN

@interfaceBaseWebController :BaseViewController

//添加預(yù)加載導(dǎo)航欄

-(void)addPreloadPageNav;

//顯示預(yù)加載導(dǎo)航欄

-(void)showPreloadPageNav;

//隱藏預(yù)加載導(dǎo)航欄

-(void)hidePreloadPageNav;

//移除預(yù)加載導(dǎo)航欄

-(void)removePreloadPageNav;

//預(yù)加載導(dǎo)航欄標題

-(void)preloadPageNavTitle:(NSString*)title;

//移除進度條

-(void)removeProgressView;

@end

NS_ASSUME_NONNULL_END

.m文件

@interface BaseWebController ()

//導(dǎo)航

@property (nonatomic,strong) UIView *preloadPageNav;

//標題

@property(nonatomic,strong)UILabel*preloadPageNavTitle;

//進度條

@property (nonatomic, strong) UIProgressView *progressView;

@property (nonatomic, strong) NSTimer *timer;

@end

@implementationBaseWebController

-(void)viewWillAppear:(BOOL)animated{

? ? [self.navigationController setNavigationBarHidden:YES animated:NO];

? ? [superviewWillAppear:animated];

}

- (void)viewWillDisappear:(BOOL)animated {

? ? [super viewWillDisappear:animated];

? ? [self.navigationController setNavigationBarHidden:NO animated:NO];

}

- (void)viewDidLoad {

? ? [super viewDidLoad];


}

//添加預(yù)加載導(dǎo)航欄

-(void)addPreloadPageNav{


? ? self.preloadPageNav=[UIView new];

? ? [self.view addSubview:self.preloadPageNav];

? ? [self.preloadPageNav mas_makeConstraints:^(MASConstraintMaker *make) {

? ? ? ? make.top.mas_equalTo(self.view);

? ? ? ? make.size.mas_equalTo(CGSizeMake(kScreenWidth, 64));

? ? }];

? ? self.preloadPageNav.backgroundColor=[UIColor colorWithHexString:@"#ec403c"];


? ? UIButton*navBackBtn=[UIButtonnew];

? ? [self.preloadPageNavaddSubview:navBackBtn];

? ? [navBackBtnmas_makeConstraints:^(MASConstraintMaker*make) {

? ? ? ? make.centerY.mas_equalTo(self.preloadPageNav).offset(10);

? ? ? ? make.left.mas_equalTo(self.preloadPageNav).mas_offset(20);

? ? }];

? ? [navBackBtnsetImage:[UIImage imageNamed:@"ic_back"] forState:UIControlStateNormal];

? ? [navBackBtnaddTarget:self action:@selector(navBackBtnClick) forControlEvents:UIControlEventTouchUpInside];

? ? navBackBtn.imageEdgeInsets=UIEdgeInsetsMake(0, -15,0,0);

? ? navBackBtn.titleEdgeInsets=UIEdgeInsetsMake(0, -5,0,0);

? ? [navBackBtnsetTitle:@"返回" forState:UIControlStateNormal];

? ? navBackBtn.titleLabel.font= [UIFontsystemFontOfSize:16];

? ? [navBackBtnsetTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];


? ? self.preloadPageNavTitle=[UILabel new];

? ? [self.preloadPageNav addSubview:self.preloadPageNavTitle];

? ? [self.preloadPageNavTitle mas_makeConstraints:^(MASConstraintMaker *make) {

? ? ? ? make.centerY.mas_equalTo(self.preloadPageNav).offset(10);

? ? ? ? make.centerX.mas_equalTo(self.preloadPageNav);

? ? }];

? ? self.preloadPageNavTitle.textColor=[UIColor whiteColor];

? ? self.preloadPageNavTitle.font=[UIFont systemFontOfSize:17];


? ? self.progressView = [UIProgressView new];

? ? [self.preloadPageNav addSubview:self.progressView];

? ? [self.progressView mas_makeConstraints:^(MASConstraintMaker *make) {

? ? ? ? make.top.equalTo(self.preloadPageNav.mas_bottom);

? ? ? ? make.size.mas_equalTo(CGSizeMake(kScreenWidth, 2));

? ? }];

? ? self.progressView.progressTintColor=[UIColor blueColor];

? ? self.progressView.trackTintColor=[UIColor clearColor];

?? ? self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(progress) userInfo:nil repeats:true];

}

- (void)progress{

? ? if (self.progressView.progress<0.5) {

? ? ? ? self.progressView.progress+=0.2;

? ? }else{

? ? ? ? self.progressView.progress+=0.3;

? ? }

? ? if(self.progressView.progress==1) {

? ? ? ? [self.timerinvalidate];

? ? ? ? [self.progressView removeFromSuperview];

? ? ? ? NSLog(@"accomplish");

? ? }

}

-(void)removeProgressView{


?? ? [self.progressView removeFromSuperview];

}

//顯示預(yù)加載導(dǎo)航欄

-(void)showPreloadPageNav{

? ? if (self.preloadPageNav) {

? ? ? ? self.preloadPageNav.hidden=NO;

? ? }else{

? ? ? ? [self addPreloadPageNav];

? ? }

}

//隱藏預(yù)加載導(dǎo)航欄

-(void)hidePreloadPageNav{

? ? if (self.preloadPageNav) {

? ? ? ? self.preloadPageNav.hidden=YES;

? ? }

}

//移除預(yù)加載導(dǎo)航欄

-(void)removePreloadPageNav{

? ? if (self.preloadPageNav) {

? ? ? ? [self.preloadPageNav removeFromSuperview];

? ? }

}

//預(yù)加載導(dǎo)航欄標題

-(void)preloadPageNavTitle:(NSString*)title{

? ? self.preloadPageNavTitle.text=title;

}

//返回按鈕點擊事件

-(void)navBackBtnClick{


? ? [self.navigationController popViewControllerAnimated:YES];

}

@end

然后創(chuàng)建一個ViewController繼承于上面的BaseWebController

- (void)viewDidLoad {

定義并創(chuàng)建webView;

?[self addPreloadPageNav];//添加預(yù)加載導(dǎo)航欄

? [self preloadPageNavTitle:@"標題"];//添加標題

}

- (void)webViewDidFinishLoad:(UIWebView*)webView{

? ? [self hidePreloadPageNav];//h5頁面加載完成方法里隱藏自定義導(dǎo)航

? ? NSLog(@"地址:%@\n",[webView.request.URL absoluteString]);

}

#pragma mark -webview加載失敗的回調(diào)

- (void)webView:(UIWebView*)webView didFailLoadWithError:(NSError*)error

{

? ? [self showPreloadPageNav];//h5頁面加載失敗方法里展示自定義導(dǎo)航

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铸题,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子探熔,更是在濱河造成了極大的恐慌烘挫,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件其垄,死亡現(xiàn)場離奇詭異卤橄,居然都是意外死亡,警方通過查閱死者的電腦和手機喇颁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門辜膝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茎毁,你說我怎么就攤上這事忱辅。” “怎么了墙懂?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵损搬,是天一觀的道長。 經(jīng)常有香客問我巧勤,道長,這世上最難降的妖魔是什么沽瞭? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任剩瓶,我火速辦了婚禮城丧,結(jié)果婚禮上豌鹤,老公的妹妹穿的比我還像新娘。我一直安慰自己磺平,他們只是感情好拐辽,可當(dāng)我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著菠劝,像睡著了一般睁搭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上园骆,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天锌唾,我揣著相機與錄音,去河邊找鬼晌涕。 笑死,一個胖子當(dāng)著我的面吹牛重窟,可吹牛的內(nèi)容都是我干的惧财。 我是一名探鬼主播,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼厅翔,長吁一口氣:“原來是場噩夢啊……” “哼帘靡!你這毒婦竟也來了瓤帚?” 一聲冷哼從身側(cè)響起涩赢,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤筒扒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后花墩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體澄步,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡村缸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年仇箱,在試婚紗的時候發(fā)現(xiàn)自己被綠了剂桥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奔垦,靈堂內(nèi)的尸體忽然破棺而出椿猎,到底是詐尸還是另有隱情犯眠,我是刑警寧澤筐咧,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布,位于F島的核電站韭赘,受9級特大地震影響泉瞻,放射性物質(zhì)發(fā)生泄漏袖牙。R本人自食惡果不足惜舅锄,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一碉怔、第九天 我趴在偏房一處隱蔽的房頂上張望禁添。 院中可真熱鬧老翘,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梆暮。三九已至偿荷,卻和暖如春遭顶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撩荣。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留台猴,地道東北人饱狂。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子白指,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 一、前言 關(guān)于蘋果的布局一直是我比較糾結(jié)的問題状蜗,是寫代碼來控制布局,還是使用storyboard來控制布局呢宏邮?以前...
    iplaycodex閱讀 2,440評論 0 1
  • 前言 由于最近兩個多月,筆者正和小伙伴們忙于對公司新項目的開發(fā),筆者主要負責(zé)項目整體架構(gòu)的搭建以及功能模塊的分工飒炎。...
    CoderMikeHe閱讀 27,013評論 74 271
  • iOS導(dǎo)航欄知乎漸變 效果圖如上,簡單分析下 1.導(dǎo)航欄一開始是隱藏的,隨著scrollView滾動而漸變 2.導(dǎo)...
    violafa閱讀 1,145評論 0 7
  • 簡 1 iOS高精仿?斗魚(OC) 開發(fā)環(huán)境:Xcode 7.3.1赤赊,語言:Objective-C 用到的工具:C...
    lmh829閱讀 3,323評論 2 6
  • 個股期權(quán) 期權(quán)抛计,是交易雙方關(guān)于未來買賣權(quán)利達成的合約吹截。 就個股期權(quán)來說,期權(quán)的買方(權(quán)利方)通過向賣方(義務(wù)方)支...
    顧劍書閱讀 443評論 0 0