UIPopoverPresentationController 使背景变暗

9

我希望为 UIPopover 实现更暗的背景色。我知道可以通过子类化 UIPopoverBackgroundView 来实现,如此处所述 here,但我正在寻找更简单的方法。

附注:我正在使用 Objective C 而非 Swift。

4个回答

15

Swift 4

我刚刚遇到了同样的问题,并找到了类似于jimmyjudas的解决方案。

在作为弹出窗口显示的viewController中:

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.presentingViewController?.view.alpha = 0.3
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        self.presentingViewController?.view.alpha = 1
    }

1
非常酷且简单的答案。我喜欢它。如果加上视图动画会更好:UIView.animate(withDuration: 0.5, animations: { self.presentingViewController?.view.alpha = 0.5 }) - mazend

3

由于用户要求Obj C解决方案- 在弹出窗口中使用VC

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.popoverPresentationController.containerView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.4];
}

3
最简单的方法就是在弹出视图之前调用 self.view.alpha = 0.2,并在弹出视图关闭后将其设置回 1.0。

只是补充一下这个答案,我覆盖了在作为弹出窗口显示的UIViewController中的ViewWillAppear和ViewWillDisappear函数来设置主视图控制器视图上的不透明度。(在Xamarin中,我使用了 UIApplication.SharedApplication.KeyWindow.RootViewController.View.Alpha = 0.5f ,并在此过程中进行了一些空值检查。) - jimmyjudas

-1

UIPopover没有背景属性,因为它是NSObject的子类 没有自定义视图属性 所以你无法改变它的内容颜色 -

 UIPopoverController *popC = [[UIPopoverController alloc] initWithContentViewController:TestingPC];
[[[popC contentViewController]  view] setBackgroundColor:[UIColor blackcolor]];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接