详解Android中Runtime解决屏幕旋转问题(推荐)
前言
大家或许在iOS程序开发中经常遇到屏幕旋转问题,比如说希望指定的页面进行不同的屏幕旋转,但由于系统提供的方法是导航控制器的全局方法,无法随意的达到这种需求。一般的解决方案是继承UINavrgationViewController,重写该类的相关方法,这样虽然也能解决问题,但是在重写的过程中至少产生两个多余的文件和不少的代码,这显然不是我们想要的。下面就使用一种较底层的方法解决这个问题。
基本原理
动态的改变UINavrgationViewController的全局方法,将我们自己重写的supportedInterfaceOrientations、shouldAutorotate方法和导航控制器对象的方法进行替换即可。
准备工作
配置项目支持方向
代码实现
将下面的方法写在所有视图控制器的父类的viewDidLoad方法中,即可完成屏幕旋转方向的配置。
//获取当前视图控制器的旋转支持方法 Method selfMtihod = class_getInstanceMethod([self class], @selector(shouldAutorotate)); //获取当前导航控制器的旋转支持方法 Method navr = class_getInstanceMethod([self.navigationController class], @selector(shouldAutorotate)); //交换方法 method_exchangeImplementations(selfMtihod, navr); //以下同理 Method selfOrientation = class_getInstanceMethod([self class], @selector(supportedInterfaceOrientations)); Method navrOrientation = class_getInstanceMethod([self.navigationController class], @selector(supportedInterfaceOrientations)); method_exchangeImplementations(selfOrientation, navrOrientation);
使用方法
在上面的父类中重写supportedInterfaceOrientations、shouldAutorotate,表示默认的屏幕旋转相关属性。
在之后的每个该试图控制器的子类中,可重写supportedInterfaceOrientations、shouldAutorotate方法,即可完成指定视图控制器方向的需求。
以上所述是小编给大家介绍的Runtime解决屏幕旋转问题的方法详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对脚本之家网站的支持!
相关文章
Android Listview中显示不同的视图布局详解及实例代码
这篇文章主要介绍了Android Listview中显示不同的视图布局详解及实例代码的相关资料,需要的朋友可以参考下2017-02-02android ListView的右边滚动滑块启用方法 分享
android ListView的右边滚动滑块启用方法 分享,需要的朋友可以参考一下2013-05-05Android TabLayout 实现底部Tab的示例代码
本篇文章主要介绍了Android TabLayout 实现底部Tab的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-01-01Flutter listview如何实现下拉刷新上拉加载更多功能
这篇文章主要给大家介绍了关于Flutter listview如何实现下拉刷新上拉加载更多功能的相关资料,对于新闻列表数据的更新和加载更多是必不可少的,而实现下拉刷新与上划加载更多的方式有很多种,需要的朋友可以参考下2021-08-08
最新评论