关闭 UIImagePickerController 后屏幕尺寸错误
Wrong screen size after dismissing UIImagePickerController
我有一个 iOS 应用程序,例如 whatsapp & ...
当我使用 UIImagePickerControllerSourceTypeCamera
源类型呈现 UIImagePickerController
时。
imagePicker = [UIImagePickerController new];
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.delegate = self;
imagePicker.mediaTypes =[NSArray arrayWithObjects:(NSString *)kUTTypeMovie,(NSString *)kUTTypeImage,nil];
[self presentViewController:imagePicker animated:YES completion:nil];
问题
有时在 Video
模式下取消或完成捕获 UIImagePickerController
后,当我返回我的 viewController(关闭相机)我的输入视图(我的 Windows)以 20 像素(状态栏高度)底部,我认为我的问题与此有关 link How to position view below green bar during phone call? ,因为在视频片段中,录制状态栏会显示片刻。
在某些情况下,我的 Windows(之前控制器中的 UITabbar 也同样处于底部)!!!
编辑
该解决方案仅适用于当前视图,但另一个视图控制器已损坏(转到底部)
如果您正在使用自动布局,您可以在 UIImagePickerController
关闭时尝试 self.view.layoutIfNeeded()
。如果这不起作用,您可以获取屏幕尺寸并将其分配给您的 self.view.frame
,如下所示:
self.view.frame = UIScreen.mainScreen().bounds
这通常适合我。
终于固定了
特别感谢 danialzahid94。
要解决此问题,您应该致电
[self dismissViewControllerAnimated:YES completion:^{
self.view.frame = [[UIScreen mainScreen]bounds];
[self.view layoutIfNeeded];
self.tabBarController.view.frame = [[UIScreen mainScreen]bounds];
[self.tabBarController.view layoutIfNeeded]; // for fixing tabbar Controller
}];
在 2 个代表中:
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
当我在更新框架后应用@Mohamad 解决方案时,当我点击 textView 时,它在键盘上方显示空白的黑色区域,当我从控制器返回时,Tabbar 向下移动,所以我实现了 下面的代码是一个永久的解决方案。
@property CGRect viewFrame;
@property CGRect tabbarFrame;
- (void)viewWillAppear:(BOOL)animated {
if (CGRectIsEmpty(self.viewFrame)) {
self.viewFrame=self.view.frame;
self.tabbarFrame=self.tabBarController.view.frame;
}
}
- (void)viewDidAppear:(BOOL)animated {
[self correctScreenSize];
}
-(void)correctScreenSize
{
self.view.frame = self.viewFrame;
[self.view layoutIfNeeded];
self.tabBarController.view.frame = self.tabbarFrame;
[self.tabBarController.view layoutIfNeeded];
}
我有一个 iOS 应用程序,例如 whatsapp & ...
当我使用 UIImagePickerControllerSourceTypeCamera
源类型呈现 UIImagePickerController
时。
imagePicker = [UIImagePickerController new];
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.delegate = self;
imagePicker.mediaTypes =[NSArray arrayWithObjects:(NSString *)kUTTypeMovie,(NSString *)kUTTypeImage,nil];
[self presentViewController:imagePicker animated:YES completion:nil];
问题
有时在 Video
模式下取消或完成捕获 UIImagePickerController
后,当我返回我的 viewController(关闭相机)我的输入视图(我的 Windows)以 20 像素(状态栏高度)底部,我认为我的问题与此有关 link How to position view below green bar during phone call? ,因为在视频片段中,录制状态栏会显示片刻。
在某些情况下,我的 Windows(之前控制器中的 UITabbar 也同样处于底部)!!!
编辑
该解决方案仅适用于当前视图,但另一个视图控制器已损坏(转到底部)
如果您正在使用自动布局,您可以在 UIImagePickerController
关闭时尝试 self.view.layoutIfNeeded()
。如果这不起作用,您可以获取屏幕尺寸并将其分配给您的 self.view.frame
,如下所示:
self.view.frame = UIScreen.mainScreen().bounds
这通常适合我。
终于固定了
特别感谢 danialzahid94。
要解决此问题,您应该致电
[self dismissViewControllerAnimated:YES completion:^{
self.view.frame = [[UIScreen mainScreen]bounds];
[self.view layoutIfNeeded];
self.tabBarController.view.frame = [[UIScreen mainScreen]bounds];
[self.tabBarController.view layoutIfNeeded]; // for fixing tabbar Controller
}];
在 2 个代表中:
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
当我在更新框架后应用@Mohamad 解决方案时,当我点击 textView 时,它在键盘上方显示空白的黑色区域,当我从控制器返回时,Tabbar 向下移动,所以我实现了 下面的代码是一个永久的解决方案。
@property CGRect viewFrame;
@property CGRect tabbarFrame;
- (void)viewWillAppear:(BOOL)animated {
if (CGRectIsEmpty(self.viewFrame)) {
self.viewFrame=self.view.frame;
self.tabbarFrame=self.tabBarController.view.frame;
}
}
- (void)viewDidAppear:(BOOL)animated {
[self correctScreenSize];
}
-(void)correctScreenSize
{
self.view.frame = self.viewFrame;
[self.view layoutIfNeeded];
self.tabBarController.view.frame = self.tabbarFrame;
[self.tabBarController.view layoutIfNeeded];
}