如何在iOS7的UIPopoverController中禁用较暗的透明效果?

如何在iOS7的UIPopoverController中禁用较暗的透明效果?,ios,uipopovercontroller,ios7,Ios,Uipopovercontroller,Ios7,我使用UIPopoverController在iPad iOS7中弹出一个视图,如下所示: if (!self.popover) { UIViewController *popupVC = [[UIViewController alloc] init]; [popupVC.view addSubview:thePopupView]; popupVC.preferredContentSize = CGSizeMake(240, 140);

我使用UIPopoverController在iPad iOS7中弹出一个视图,如下所示:

    if (!self.popover) {
        UIViewController *popupVC = [[UIViewController alloc] init];
        [popupVC.view addSubview:thePopupView];
        popupVC.preferredContentSize = CGSizeMake(240, 140);
        self.popover = [[UIPopoverController alloc] initWithContentViewController:popupVC];
        self.popover.delegate = self;
    }


    [self.popover presentPopoverFromBarButtonItem:barButton permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
但是,当popover处于活动状态时,它会使屏幕变得更暗,而这种效果不会影响iOS6中的其他视图


如何克服这个问题?谢谢

如果您指的是插入到popover下的暗显视图,则只有一种解决方法-使用自定义的
PopoOverBackgroundViewClass


它很复杂,但并不像您想象的那么复杂。

另一种方法是遍历popover视图堆栈并手动删除变暗视图,如
UIPopoOvercontroller
子类中所示:

@property (nonatomic, assign) BOOL showsDimmingView;

....

- (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item
           permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections
                           animated:(BOOL)animated
{
    [super presentPopoverFromBarButtonItem:item
                  permittedArrowDirections:arrowDirections
                                  animated:animated];

    if (!_showsDimmingView) {
        [self removeDimmingView:[[UIApplication sharedApplication].keyWindow.subviews lastObject]];
    }
}

- (void)presentPopoverFromRect:(CGRect)rect
                        inView:(UIView *)view
      permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections
                      animated:(BOOL)animated
{
    [super presentPopoverFromRect:rect
                           inView:view
         permittedArrowDirections:arrowDirections
                         animated:animated];

    if (!_showsDimmingView) {
        [self removeDimmingView:[[UIApplication sharedApplication].keyWindow.subviews lastObject]];
    }
}

- (void)removeDimmingView:(UIView *)subview
{
    for (UIView *sv in subview.subviews) {

        if (sv.alpha == 0.15f && [sv isKindOfClass:NSClassFromString(@"_UIPopoverViewBackgroundComponentView")]) {
            sv.alpha = 0.f;
        }

        const CGFloat *components = CGColorGetComponents(sv.backgroundColor.CGColor);
        if (sv.backgroundColor && (components[1] == 0.15f || sv.alpha == 0.15f)) {
            [sv removeFromSuperview];
        }

        [self removeDimmingView:sv];
    }
}

我的popover内容只是小rect(240140)。但暗效果会影响整个屏幕。这不是阴影视图。@UFO你能给我们看一张截图吗?不看就很难理解。我不是说“影子”,我是说“昏暗的视野”(英语不是我的母语)。@UFO那是昏暗的视野。我相信它是纯黑色的,alpha=0.15。这是一个真正的痛苦,尤其是对于没有被排除在变暗之外的直通视图。使用自定义
popoverBackgroundViewClass
是唯一的方法。我还没有完成自定义。但这是正确的答案。谢谢@不幸的是,没有其他方法可以做到这一点。查看苹果开发者论坛,有很多关于它的讨论。我相信他们想模糊背景,但后来他们意识到,如果不调暗,背景就不好看。这种方法充满了危险。这种方法在iOS 8上不再适用。你还有别的解决办法吗?