更改UIPopoverView背景+箭头颜色

Ber*_*rnd 28 uiview ios uipopoverbackgroundview swift ios8

有没有办法在iOS8 上简单地更改UIPopoverView背景颜色(包括它的箭头)?

(我确实阅读了几篇关于自定义"UIPopoverControllers"的文章.这是否也适用于此,意味着答案是"不"?)

在此输入图像描述

这不是我应该能够在prepareForSegue方法中触发弹出窗口的东西吗?我怎样才能达到相应的视图来改变它的外观?

Ber*_*rnd 57

我找到了解决方案.使用iOS8不再需要子类化!可以在tableview - > navigation - > popoverPresentationController中访问和更改背景

    self.navigationController?.popoverPresentationController?.backgroundColor = UIColor.redColor()
Run Code Online (Sandbox Code Playgroud)

有关此内容的更多信息,请参见WWDC会话214.

  • 如果你的 popover 没有导航控制器,那么使用 `self.popoverPresentationController?.backgroundColor = UIColor.red` (2认同)

Dan*_*uta 10

您可以像这样修改popover:

    let popoverViewController = self.storyboard?.instantiateViewControllerWithIdentifier("popoverSegue")
    popoverViewController!.popoverPresentationController?.delegate = self
    popoverViewController!.modalPresentationStyle = .Popover


    let popoverSize = CGSize(width: 150, height: 60)
    popoverViewController!.preferredContentSize = popoverSize
    let popover = popoverViewController!.popoverPresentationController
    popover?.delegate = self
    popover?.permittedArrowDirections = .Up
    popover?.sourceView = self.view

    //change background color with arrow too!
    popover?.backgroundColor = UIColor.whiteColor()
    popover?.sourceRect = CGRect(x: self.view.frame.width, y: -10, width: 0, height: 0)
    presentViewController(popoverViewController!, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)


Tra*_* M. 6

似乎 popoverPresentationController.backgroundColor 在 iOS13 中不再起作用。

弹出窗口箭头现在看起来采用弹出窗口 viewController 的 view.backgroundColor 的颜色。

下面是演示的完整代码:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let sourceButton = sender as? UIButton, let popover = segue.destination.popoverPresentationController {
        popover.sourceView = sourceButton.superview
        popover.sourceRect = sourceButton.frame
        popover.permittedArrowDirections = [.left]
        popover.delegate = self
        segue.destination.preferredContentSize = CGSize(width: 100, height: 100)
        //popover.backgroundColor = sourceButton.tintColor  //old way
        segue.destination.view.backgroundColor = sourceButton.tintColor  //new way
    }
}

@IBAction func btnTap(_ sender: Any) {
    performSegue(withIdentifier: "popoverSegue", sender: sender)
}

func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
    return .none
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述