前言
APP里面的uniapp小程序要接入微信支付,但是支付的调起为实现统一管理是由APP原生调起支付,不是每个小程序自己实现。所以,支付完成的页面也是写在APP宿主原生页面的,涉及到小程序打开原生页面的跳转方式。
页面跳转方式
众所周知,常见的IOS页面跳转有present和push两种。
前者弹出的视图是模态视图,由UIViewController
管理的视图控制器堆栈。新弹出的页面可以看见上一个页面。
后者是由UINavigationController
管理的视图控制器堆栈,打开新视图都入栈,调用之前的视图则需要出栈。在window下同时只能显示一个ViewController。
一、使用push跳转
-
实现push跳转过程
为了实现新页面的全覆盖,我使用了push打开方式。为了保证小程序能push打开,修改APP宿主打开uniapp小程序的方式从默认DCUniMPOpenModePresent变成DCUniMPOpenModePush。
小程序打开的配置代码:
// 初始化小程序的配置信息对象
DCUniMPConfiguration *configuration = [[DCUniMPConfiguration alloc] init];
/**
修改打开方式present变成push
*/
configuration.openMode = DCUniMPOpenModePush;
// 配置启动小程序时传递的参数
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];
//当前小程序页面
/ 小程序打开状态,调用此方法可获取小程序对应的 DCUniMPViewController 实例
UIViewController *currentVC=[DCUniMPSDKEngine getUniMPViewController];
[currentVC.navigationController pushViewController:vc animated:YES];
-
push方式打开原生页面的优缺点:
优点:保证了全部新页面都是通过由UINavigationController
管理,保证了整个APP打开页面的统一性。
缺点:uniapp通过push方式打开的小程序侧滑退出会出现多层标题栏。如图:
-
解决方案(并未解决,更换present打开)
-
解决方案一:
-
翻阅官方文档,通过uniapp代码修改小程序控制器标题栏显隐,结果侧滑还是会出现两个按钮。
-
/// 注意:只有通过 push 的方式打开小程序才生效 /// @param hidden 是否隐藏 + (void)whenUniMPCloseSetNavigationBarHidden:(BOOL)hidden; /// 设置 push 打开方式小程序内是否自动控制原生导航栏的显隐(默认控制) /// @param isControl Bool + (void)setAutoControlNavigationBar:(BOOL)isControl;
官方代码文档地址:DCUniMPSDKEngine | uni小程序SDK
-
解决方案二:
-
修改项目控制页面跳转的
UINavigationController
,判断若是小程序实例则隐藏,Debug模式下发现小程序打开未走过UINavigationController
。 -
方案失败。
二、使用present跳转
-
实现present跳转过程
默认打开uniapp的方式,不修改。
打开原生APP页面代码:
//第二个页面
PayResultVC *vc=[PayResultVC new];
//当前小程序页面
/ 小程序打开状态,调用此方法可获取小程序对应的 DCUniMPViewController 实例
UIViewController *currentVC=[DCUniMPSDKEngine getUniMPViewController];
[currentVC presentModalViewController:vc animated:YES];
-
present方式打开原生页面的优缺点:
-
优点:没有push打开小程序侧滑出现的多个导航栏Bug。
缺点:打开的新页面无法全部覆盖上一层页面,有空隙。如图:
- 修改方式
修改跳转模式,变成全屏模式。代码:文章来源:https://www.toymoban.com/news/detail-781765.html
//第二个页面
PayResultVC *vc=[PayResultVC new];
//模式要加在新打开的页面
vc.modalPresentationStyle=UIModalPresentationFullScreen;
//当前小程序页面
/ 小程序打开状态,调用此方法可获取小程序对应的 DCUniMPViewController 实例
UIViewController *currentVC=[DCUniMPSDKEngine getUniMPViewController];
[currentVC presentModalViewController:vc animated:YES];
修改结果:
可以全部覆盖上级页面,也没有多个导航栏的Bug。文章来源地址https://www.toymoban.com/news/detail-781765.html
到了这里,关于【IOS-Debug】uniapp小程序打开APP原生页面的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!