Ios UIImagePickerController黑色不透明底栏

Ios UIImagePickerController黑色不透明底栏,ios,iphone,camera,uiimagepickercontroller,autolayout,Ios,Iphone,Camera,Uiimagepickercontroller,Autolayout,我需要我的观点有一个黑色不透明的底部和顶部栏拍照时。我希望它看起来像这样: 这就是我在运行iOS 7的iPhone5上运行代码的原因。但当我在iPhone4S(也是iOS7)上编译代码时,底部的栏变得透明——视图从上到下变成了一个摄像头,就像现在的摄像头应用程序一样。甚至“拍照”按钮也变得透明,如SnapChat。我讨厌这个。我需要更改什么设置才能使iPhone 4S上的底部栏变得不透明?我正在使用自动布局 这在我的视图中显示: if ([UIImagePickerController isS

我需要我的观点有一个黑色不透明的底部和顶部栏拍照时。我希望它看起来像这样:

这就是我在运行iOS 7的iPhone5上运行代码的原因。但当我在iPhone4S(也是iOS7)上编译代码时,底部的栏变得透明——视图从上到下变成了一个摄像头,就像现在的摄像头应用程序一样。甚至“拍照”按钮也变得透明,如SnapChat。我讨厌这个。我需要更改什么设置才能使iPhone 4S上的底部栏变得不透明?我正在使用自动布局

这在我的视图中显示:

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    {
        self.anImagePickerController = [UIImagePickerController new];
        self.anImagePickerController.delegate = self;
        self.anImagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
        self.anImagePickerController.showsCameraControls = YES;

        [self presentViewController:self.anImagePickerController animated:NO completion:Nil];
    }

我认为您无法修改
UIImagePickerController
的行为。由于较小屏幕设备上的屏幕空间不足,可能会删除黑条。如果坚持这种行为,则需要使用自定义覆盖方法。您可以将
showsCameraControls
设置为
NO
,并提供一个
cameraOverlayView
,该视图将根据需要进行操作。在自定义覆盖视图中,当用户点击按钮拍照时,在图像选择器控制器上调用
takePicture

您可以在Apple的示例中看到覆盖视图的示例实现:

UIImagePickerController是一种UINavigationController。您抱怨的工具栏是UINavigationController的
工具栏
。您肯定知道,在iOS 7上,默认情况下工具栏是透明的(或至少是半透明的)。

下面的代码将完全满足您的需要。我自己发现了这一点,因为我想做与你完全相同的事情,并且觉得滚动你自己的相机控制器是完全没有必要的

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.allowsEditing = YES;
imagePicker.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;
imagePicker.delegate = self;

 [self presentViewController:imagePicker animated:YES completion:^()
 {   
     for (UIView *subview in imagePicker.view.subviews)
     {
        if([NSStringFromClass([subview class]) isEqualToString:@"UINavigationTransitionView"])
        {
            UIView *theView = (UIView *)subview;

            for (UIView *subview in theView.subviews)
            {
               if([NSStringFromClass([subview class]) isEqualToString:@"UIViewControllerWrapperView"])
               {
                   UIView *theView = (UIView *)subview;

                    for (UIView *subview in theView.subviews)
                    {
                         if([NSStringFromClass([subview class]) isEqualToString:@"PLCameraView"])
                         {
                             UIView *theView = (UIView *)subview;

                             for (UIView *subview in theView.subviews)
                             {
                                 if([NSStringFromClass([subview class]) isEqualToString:@"CAMTopBar"])
                                 {
                                      subview.backgroundColor = [UIColor blackColor];
                                 }
                                 if([NSStringFromClass([subview class]) isEqualToString:@"CAMBottomBar"])
                                 {
                                      subview.backgroundColor = [UIColor blackColor];
                                 }
                                 if([NSStringFromClass([subview class]) isEqualToString:@"PLCropOverlay"])
                                 {
                                     UIView *theView = (UIView *)subview;

                                     for (UIView *subview in theView.subviews)
                                     {
                                         if([NSStringFromClass([subview class]) isEqualToString:@"PLCropOverlayBottomBar"])
                                         {
                                              UIView *theView = (UIView *)subview;

                                              for (UIView *subview in theView.subviews)
                                              {
                                                  if([NSStringFromClass([subview class]) isEqualToString:@"PLCropOverlayPreviewBottomBar"])
                                                  {
                                                      subview.backgroundColor = [UIColor blackColor];
                                                  }
                                              }
                                          }
                                      }
                                  }
                              }
                          }
                      }
                 }
             }
         }
     }
}];

它并没有占用更多的空间,因为屏幕右侧仍然有一个“拍照”按钮。我只是不希望它是透明的-我需要以某种方式将它设置为黑色不透明。你必须实现覆盖视图。我已经有一个小的覆盖视图,在“拍照”按钮上方有黑色背景。但如果我想让它去爱人,它会隐藏按钮。有没有办法让它滑到“拍照”按钮下?没有。你必须取消相机的控制,自己动手操作。这看起来需要很多小时。你有什么好的教程可以推荐吗?嘿,马特,在界面生成器中,我用“不透明黑色导航栏”和“不透明黑色工具栏”设置了显示相机的导航控制器。显然,它可以在iPhone5上运行,但不能在4S上运行(4英寸对3.5英寸)。有解决方案吗?图像选择器控制器(更具体地说是相机控制器)中的黑条不是工具栏。但是否可以更改其颜色/透明度?@anthoprotic No。相机控制器的视图层次结构是私有的,不支持更改。你要么接受别人给你的,要么自己滚。投票支持打破“嵌套花括号”记录。这在iOS6中有效吗?iOS6.1?第七次失败?iOS7.1b1?iOS7.1b2?iOS7.1b3?iOS7.1?iOS7.2?iOS8?另外,在代码中包含诸如“UIViewControllerRapperView”之类的字符串是让应用程序从应用商店中被拒绝的一个好方法。事实上,不幸的是,可能会使用AVFoundation。啊,这真是个噩梦,真的很管用!谢谢!顺便问一下,我在3.5英寸的iPhone上运行iOS 7,但它能在iOS 6.0 3.5英寸的iPhone上运行吗?