【问题标题】:Wrong screen size after dismissing UIImagePickerController关闭 UIImagePickerController 后屏幕尺寸错误
【发布时间】:2015-09-08 10:31:21
【问题描述】:

我有一个 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 像素(状态栏高度)进入底部时,我想我的问题与此链接How to position view below green bar during phone call? 有关,因为在视频片段中,录制状态栏会显示片刻。 在某些情况下,我的 Windows (前一个控制器中的 UITabbar 与底部相同)!!!

编辑

该解决方案仅适用于当前视图,但另一个视图控制器已损坏(进入底部)

【问题讨论】:

  • 最好发布你的代码,你迄今为止尝试过的,以便有人可以帮助你。
  • @Bharat 请再检查一次,(我认为这很正常)我不是 n00b:-/

标签: ios objective-c uiimagepickercontroller


【解决方案1】:

终于固定了

特别感谢 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

【讨论】:

  • 哦,对了。我不知道整个 viewController 层次结构受到干扰。下次我会记住这一点。
  • 我在iOS 13中第一次看到这样的错误。这个解决方案修复了它,谢谢!
【解决方案2】:

如果您使用自动布局,您可以在UIImagePickerController 关闭时尝试self.view.layoutIfNeeded()。如果这不起作用,您可以获取屏幕尺寸并将其分配给您的self.view.frame,如下所示:

self.view.frame = UIScreen.mainScreen().bounds

这通常对我有用。

【讨论】:

  • 我的项目是自动布局。这个时候我会试试的。让我通知一下。我想说一点:关闭相机后(显示红色的状态栏记录一秒钟(如呼叫状态栏),我认为它会导致这个问题。
  • 我应该调用 self.view.layoutIfNeeded() -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { [picker dismissViewControllerAnimated:YES 完成:^{ [self.view layoutIfNeeded]; }];或者在这个块之外?
  • 是的,您将在该块中调用它。在调用layoutIfNeeded之前添加self.view.frame = [[UIScreen mainScreen] bounds]
  • 我认为只有 self.view.frame = [[UIScreen mainScreen] 范围足够了,让我通知最终结果:)
  • 你也应该添加 layoutIfNeeded
【解决方案3】:

当我在更新框架后应用@Mohamad 解决方案时,当我点击 textView 时,它在键盘上方显示空白黑色区域,当我从控制器返回时,标签栏向下移动,所以我实现了 下面的代码是一个永久的解决方案

@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];

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多