[iOS] 调用presentViewController和dissmissViewController引起的frame显示错误

今天在检测相册(photo+camera)这部分的bug时,发现在长按(long press)照片、录像或点击拍照的图标之后,再返回原来的view(assetTableViewController),该view会显示 错误,会显示一片空白。

下面现总结我的工作思路和debugging的步骤:

1. 设断点;在返回的view controller的viewwillappear和viewwilllayoutsubviews这两处设置断点以查看该view的frame大小

2. 重现bug:长按照片或录像等,当进入该view时在两个端点处看到该view的frame变化了!!

具体是:会进入viewwilllayoutsubviews函数3次,并在第二次和第三次被改变了,y变成了0.

3. 跟踪代码并大胆猜测:发现这些返回的操作都同时先后调用了presentViewControllerhe dismissViewController(这个是难点和关键)

在网上试图找解决方案,未果!之后通过在每个函数之后添加自己之前写的一个webbrowserviewcontroller来进行检测,即将presentviewController这段代码换成webbrowserviewcontroller,然后返回,惊奇地发现没问题了。

4. 尝试解决:presentViewController 是UIViewController的方法,它的实现我们没法改变,所以只能从自己的代码下手。首先该view嵌套在另一个view里面,所以尝试用

一个containerVC = [UIApplication sharedApplication].keyWindow.rootViewController来进行present和dismiss。实验之后发现正确!

虽然问题解决了,但是还是不知其所以然,希望看官们能参与讨论并提出建议~~

时间: 2024-11-07 17:05:39

[iOS] 调用presentViewController和dissmissViewController引起的frame显示错误的相关文章

iOS调用系统相机

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])//判断相机是否可用,模拟器不可用相机. { UIImagePickerController *imagePickerController=[[UIImagePickerController alloc] init]; imagePickerController.delegate = self; imagePick

iOS调用系统发短信功能详解

iOS调用系统的发短信功能可以分为两种:1,程序外调用系统发短信.2,程序内调用系统发短信.第二种的好处是用户发短信之后还可以回到app.这对app来说非常重要. 程序外调用系统发短信 这个方法其实很简单,直接调用openURL即可: [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms://13888888888"]]; 程序内调用系统发短信 1)导入MessageUI.framework,并引入头文

iOS 调用系统电话

1,直接调用,结束后不返回自己的应用 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://10086"]]; 2,使用WebView请求调用系统电话,结束后可以返回自身应用,合法 UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero]; [self.view addSubview:webView]; [webView l

IOS问题汇总:2015-1-9 iOS 调用系统发短信以及打电话功能

iOS 调用系统发短信以及打电话功能 ios电话smsinterface互联网class先介绍一种最简单的方法: 调用打电话功能 [[UIApplicationsharedApplication] openURL:[NSURL URLWithString:@“tel://10086”]]; 调用发短信功能 [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@“sms://10000”]]; 上面的发短信的功能是调用系统的

ios调用Html内JS alert 不能点击关闭为甚?

ios调用Html内JS alert 不能点击关闭为甚? This question gave me the most insight to the problem... Deadlock with GCD and webView The gist is that the thread handling the JS from the stringByEvaluatingJavaScriptFromString: method and the thread handling the iOS al

IOS调用WCF提供的服务方法,但是方法的参数是WCF那边自定义的对象,这样有办法调用么,如果可以IOS应该怎么传参呢?请问有了解的么,

最近做一个项目后端使用WCF接收Android手机拍照并带其它参数保存到服务器里:刚好把最近学习的WCF利用上,本以为是个比较简单的功能应该很好实现,没想到其中碰到不少问题,在网上搜索很久一直没有想到的解决方案,最后实现对数据流的分段写入然后后端再来解析流实现的此功能:后端运用WCF中的REST来接收数据:REST还是比较简单的知识,若是不懂可以简单网上了解一下:下面我们先了解一些本次运用到的理论知识: 一:理论知识 由于低层协议特性限制,WCF的流模式只支持如下四种:1:BasicHttpBi

IOS修改webView背景透明以及IOS调用前台js的方法

工作上遇到IOS的webView中的H5页面需要透明以显示webView的背景颜色.用H5自身的透明度的css样式或者js控制背景颜色及透明度都打不到想要的效果,最后还是通过ios设置webView中的body颜色及透明度来实现的,具体代码如下: -(void) webViewDidFinishLoad:(UIWebView *)webView { [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTa

IOS 调用系统发短信以及打电话的功能

IOS 调用系统发短信以及打电话的功能 http://blog.csdn.net/lwq421336220/article/details/7818979 先介绍一种最简单的方法: 调用打电话功能 [[UIApplicationsharedApplication] openURL:[NSURL URLWithString:@"tel://10086"]]; 调用发短信功能 [[UIApplication sharedApplication]openURL:[NSURL URLWithS

ios 调用系统设置,并进入相关的设置项

应用程序调用系统设置,并进入相关的设置项 1.在iOS 5.1以前 可以使用URLs schemes,直接用openURL:打开 例如: NSURL*url=[NSURL URLWithString:@"prefs:root=LOCATION_SERVICES"]; [[UIApplication sharedApplication] openURL:url]; prefs:root=LOCATION_SERVICES 这就是URL 打开位置服务 相应的打开其他的  可搜素关键词”iO