【问题标题】:Dismissing UIImagePickerController broke parent viewController's frame size - iOS 8解雇 UIImagePickerController 破坏了父 viewController 的帧大小 - iOS 8
【发布时间】:2015-04-06 18:38:31
【问题描述】:

当我使用媒体类型 kUTTypeMovie 关闭 UIImagePickerController(以模态方式呈现)时 - 在 iOS 8 上,它会将父 viewController 的帧大小打破 20 像素(状态栏高度)。在 iOS 7 上一切正常。

呈现选择器代码:

UIImagePickerController* picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.cameraDevice = UIImagePickerControllerCameraDeviceFront;
picker.mediaTypes = @[(NSString*)kUTTypeMovie];
[self.navigationController presentViewController:picker animated:YES completion:nil];

隐藏选择器代码:

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
    [picker dismissViewControllerAnimated:NO completion:^
    {
    }];
}

项目使用故事板,我使用的是 xCode 6.1

【问题讨论】:

  • 你在使用自动布局/约束吗?你在使用 UINavigationBar 吗?如果以编程方式更新框架,您是否将相关视图的 translatesautoresizingmaskintoconstraints 设置为 false?我没有一个很好的明确答案,但如果我遇到这个问题,我可能会调查这些事情(以及来 Stack Overflow 寻求帮助:))不要忘记对下面的任何答案进行投票帮助,并确保接受之后实际解决您问题的答案。这就是人们在这里赢得声誉的方式,您也将参与其中。
  • @1sand0s 好答案:D
  • @1s 和 0s 感谢您的回答 :-) 是的,我在那里使用 UINavigationBar,但我没有以编程方式更新我的视图控制器的框架。关闭选择器后只是大小错误,当我显示此选择器并将 mediaTypes 设置为 kUTTypeImage 时没有问题

标签: ios objective-c uiimagepickercontroller


【解决方案1】:

您需要在视图中隐藏状态栏,并且您使用以下代码调用 imagepicker 的类的 ViewDidLoad。

    dispatch_async(dispatch_get_main_queue(), ^{
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];

});

您还需要设置状态栏以显示在 ViewDidAppear 中:

    dispatch_async(dispatch_get_main_queue(), ^{
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];

});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    相关资源
    最近更新 更多