iOS 13.0 之 presentViewController 模态全屏适配解决方案
在iOS 13.0 之前,模态显示视图默认是全屏,但是iOS 13.0 之后,默认是Sheet卡片样式的非全屏,即:
之前,modalPresentationStyle值默认为:UIModalPresentationFullScreen;
之后,modalPresentationStyle默认值为:UIModalPresentationAutomatic;
解决方案:
第一种:在每个方法中添加/修改控制器属性值modalPresentationStyle为UIModalPresentationFullScreen即可解决,代码如下:
-(void)openTypeDetailVC:(int)row{ITQuestionDetailViewController *detailVC = [[ITQuestionDetailViewController alloc] init];detailVC.modalPresentationStyle = UIModalPresentationFullScreen;[self presentViewController:detailVC animated:YES completion:nil];
}
对比效果图如下:
第二种:利用OC运行时(Runtime)特性做全局替换修改,免得采用方法一导致遗漏某个页面,同时也能修改第三方代码中的模态显示,如腾讯广告首页开屏等,原理就是在运行时检查方法,然后做IMP交互,让方法重载,执行自定义代码,全部代码如下:
#import <UIKit/UIKit.h>NS_ASSUME_NONNULL_BEGIN@interface UIViewController (ITModal)@endNS_ASSUME_NONNULL_END
#import "UIViewController+ITModal.h"
#import <objc/runtime.h>@implementation UIViewController (ITModal)+ (void)load{[super load];SEL originalSel = @selector(presentViewController:animated:completion:);SEL overrideSel = @selector(override_presentViewController:animated:completion:);Method originalMet = class_getInstanceMethod(self.class, originalSel);Method overrideMet = class_getInstanceMethod(self.class, overrideSel);method_exchangeImplementations(originalMet, overrideMet);
}#pragma mark - Swizzling
- (void)override_presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^ __nullable)(void))completion{if(@available(iOS 13.0, *)){if (viewControllerToPresent.modalPresentationStyle == UIModalPresentationPageSheet){viewControllerToPresent.modalPresentationStyle = UIModalPresentationFullScreen;}}[self override_presentViewController:viewControllerToPresent animated:flag completion:completion];
}@end
只需将本Category类放入工程即可解决。
对比效果图如下(解决三方平台无法修改源代码问题):
至此,iOS 13.0 的模态全屏适配显示问题得到了比较完美的解决。
iOS 13.0 之 presentViewController 模态全屏适配解决方案相关推荐
- iOS 13.0 暗黑模式的适配
一.暗黑模式的原理 将原本的资源文件,创建出两种不同的模式.根据不同的模式,自动获取该样式的资源. 每次切换系统模式的时候,系统会重新调用一些方法,重新赋值. 二.暗黑模式适配主要考虑的是: 1. 图 ...
- 免费最新iOS 13.0、iOS 13.1真机调试包,不需要积分
1.iOS 13.0真机包:http://www.whlanhang.com/uploads/DeviceSupport/13.0.zip 2.iOS 13.1真机包:http://www.whlan ...
- cocos creator屏幕适配fitHeight / fitWidth,手机端竖屏,pc端浏览器适配,pc分辨率全屏适配,血条跟随的适配
一,使用creator3.3.2 分别实现手机端和浏览器的适配效果如下 打包web-mobile(居然会有这种需求 /流汗!) pc浏览器显示 手机端显示 1.首先在项目中设置分辨率 和默认适配 这里 ...
- iOS APP 中H5视频默认全屏播放
问题描述:在Android中,视频可以正常在H5页面局部播放,iOS中则自动切换至全屏模式,需要禁止视频自动全屏播放. 解决方法: H5端: iOS10以上H5视频不自动全屏播放识别 playsinl ...
- android 4.0以上WebView不能全屏播放视频的解决办法
上次鄙人做了一个简单的利用webView实现的一个浏览器!其中遇到了两个问题,一个是将浏览器中需要下载的内容托管到系统默认的下载程序进行下载,这个比较简单就不在这里讨论了:另一个问题就是我们的Andr ...
- iOS 13.0 至 13.7 平刷系统教程
来自 : 某QQ群分享文件,整理后发布 如侵权告知删除 关于 Succession 平刷插件信息: 插件:Succession 版本:1.4.15 开发者:Samg_is_a_Ninja 系统支持:i ...
- iOS 13.0新特性
苹果在WWDC 2019苹果开发者大会上发布了全新的iOS 13系统.传了很久期待很久的黑暗模式也出现在了全新的iOS 13系统上.黑暗模式为iPhone带来了一种引人注目的全新外观. 全新的黑暗模式 ...
- ios html 全屏播放,iOS APP 中H5视频默认全屏播放问题解决
问题描述:在Android中,视频可以正常在H5页面局部播放,iOS中则自动切换至全屏模式. 查看资料得以解决,20190301记录下来. 解决方法:IOS10及以后,在 video标签页中只包含 w ...
- 安卓应用全屏适配(游戏)
前言 在前些日子中,DFQ默认的全屏方案在各种花里胡哨的安卓手机屏幕(如水滴屏.额头屏等全面屏)中出现大黑边. 在游戏应用中,如果两边有黑边,自然是玩起来不舒服的:所以只能寻找解决方案进行适配. 经过 ...
最新文章
- ActiveMQ 入门
- 盘点智能语音行业:Nuance没落 BAT围绕核心业务
- python课堂整理15---map, filter,reduce函数
- JavaScript 第二课 JavaScript语法
- UWP 推荐 | 限时免费的RSS阅读器《RSS 追踪》登录 Windows 10
- 前端开发 锚点链接 简单轮播图 0302
- 一般左边后台点击收缩展开的效果
- gdb 调试kvm虚拟机_GDB+QEMU调试内核模块(实践篇)
- 求1~100以内的素数,最简单的方式
- 国民经济行业代码与投入产出表IO2002年行业代码
- 什么是YottaChain存储,为什么说是未来数据存储的趋势?
- 系统发育树操作神器-TreeTools-持续更新
- 智能称重系统,车牌识别的优势
- 【C语言程序设计进阶-浙大翁恺】C语言笔记 文件
- 百度地图API 解析经纬度
- 物联网体系的系统构架和用途
- C#设计程序购买商品总金额
- Windows复制文件提示指定的文件名无效或太长
- 【10.03】富士康(世界500强第22位) 嵌入式软件相关多岗位招聘 10-45k月薪 内推...
- [Python] 【原创】[Python源码]企业支付宝自动批量转账脚本