前言
APP里面的uniapp小程序要接入微信支付,但是支付的調(diào)起為實現(xiàn)統(tǒng)一管理是由APP原生調(diào)起支付,不是每個小程序自己實現(xiàn)。所以,支付完成的頁面也是寫在APP宿主原生頁面的,涉及到小程序打開原生頁面的跳轉(zhuǎn)方式。
頁面跳轉(zhuǎn)方式
眾所周知,常見的IOS頁面跳轉(zhuǎn)有present和push兩種。
前者彈出的視圖是模態(tài)視圖,由UIViewController
管理的視圖控制器堆棧。新彈出的頁面可以看見上一個頁面。
后者是由UINavigationController
管理的視圖控制器堆棧,打開新視圖都入棧,調(diào)用之前的視圖則需要出棧。在window下同時只能顯示一個ViewController。
一、使用push跳轉(zhuǎn)
-
實現(xiàn)push跳轉(zhuǎn)過程
為了實現(xiàn)新頁面的全覆蓋,我使用了push打開方式。為了保證小程序能push打開,修改APP宿主打開uniapp小程序的方式從默認DCUniMPOpenModePresent變成DCUniMPOpenModePush。
小程序打開的配置代碼:
// 初始化小程序的配置信息對象
DCUniMPConfiguration *configuration = [[DCUniMPConfiguration alloc] init];
/**
修改打開方式present變成push
*/
configuration.openMode = DCUniMPOpenModePush;
// 配置啟動小程序時傳遞的參數(shù)
configuration.extraData = @{ @"arguments":@"Hello uni microprogram" };
// 啟動小程序
[DCUniMPSDKEngine openUniMP:k_AppId configuration:configuration completed:^(DCUniMPInstance * _Nullable uniMPInstance, NSError * _Nullable error) {
if (uniMPInstance) {
// success
} else {
// error
}
}];
在小程序打開的時候,使用push方式打開。
//第二個頁面
PayResultVC *vc=[PayResultVC new];
//當前小程序頁面
/ 小程序打開狀態(tài),調(diào)用此方法可獲取小程序?qū)?DCUniMPViewController 實例
UIViewController *currentVC=[DCUniMPSDKEngine getUniMPViewController];
[currentVC.navigationController pushViewController:vc animated:YES];
-
push方式打開原生頁面的優(yōu)缺點:
優(yōu)點:保證了全部新頁面都是通過由UINavigationController
管理,保證了整個APP打開頁面的統(tǒng)一性。
缺點:uniapp通過push方式打開的小程序側(cè)滑退出會出現(xiàn)多層標題欄。如圖:
-
解決方案(并未解決,更換present打開)
-
解決方案一:
-
翻閱官方文檔,通過uniapp代碼修改小程序控制器標題欄顯隱,結(jié)果側(cè)滑還是會出現(xiàn)兩個按鈕。
-
/// 注意:只有通過 push 的方式打開小程序才生效 /// @param hidden 是否隱藏 + (void)whenUniMPCloseSetNavigationBarHidden:(BOOL)hidden; /// 設(shè)置 push 打開方式小程序內(nèi)是否自動控制原生導航欄的顯隱(默認控制) /// @param isControl Bool + (void)setAutoControlNavigationBar:(BOOL)isControl;
官方代碼文檔地址:DCUniMPSDKEngine | uni小程序SDK
-
解決方案二:
-
修改項目控制頁面跳轉(zhuǎn)的
UINavigationController
,判斷若是小程序?qū)嵗齽t隱藏,Debug模式下發(fā)現(xiàn)小程序打開未走過UINavigationController
。 -
方案失敗。
二、使用present跳轉(zhuǎn)
-
實現(xiàn)present跳轉(zhuǎn)過程
默認打開uniapp的方式,不修改。
打開原生APP頁面代碼:
//第二個頁面
PayResultVC *vc=[PayResultVC new];
//當前小程序頁面
/ 小程序打開狀態(tài),調(diào)用此方法可獲取小程序?qū)?DCUniMPViewController 實例
UIViewController *currentVC=[DCUniMPSDKEngine getUniMPViewController];
[currentVC presentModalViewController:vc animated:YES];
-
present方式打開原生頁面的優(yōu)缺點:
-
優(yōu)點:沒有push打開小程序側(cè)滑出現(xiàn)的多個導航欄Bug。
缺點:打開的新頁面無法全部覆蓋上一層頁面,有空隙。如圖:
???????
- 修改方式
修改跳轉(zhuǎn)模式,變成全屏模式。代碼:文章來源:http://www.zghlxwxcb.cn/news/detail-781765.html
//第二個頁面
PayResultVC *vc=[PayResultVC new];
//模式要加在新打開的頁面
vc.modalPresentationStyle=UIModalPresentationFullScreen;
//當前小程序頁面
/ 小程序打開狀態(tài),調(diào)用此方法可獲取小程序?qū)?DCUniMPViewController 實例
UIViewController *currentVC=[DCUniMPSDKEngine getUniMPViewController];
[currentVC presentModalViewController:vc animated:YES];
修改結(jié)果:
可以全部覆蓋上級頁面,也沒有多個導航欄的Bug。文章來源地址http://www.zghlxwxcb.cn/news/detail-781765.html
到了這里,關(guān)于【IOS-Debug】uniapp小程序打開APP原生頁面的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!