如何在不绘制自己的情况下更改 UIPopoverPresentationController 箭头颜色

How to change UIPopoverPresentationController's arrow color without drawing my own

我想更改 UIPopoverPresentationController 用来指向源头的箭头的颜色。我能看到的唯一方法是继承 UIPopoverBackgroundView 并编写 drawRect 并自己绘制弹出框边框和箭头。这很痛苦,因为在默认的弹出窗口中几乎没有什么细节,比如所有东西都有圆角。我想让它在平台上尽可能有宾至如归的感觉。

我真的必须自己绘制弹出框箭头才能更改箭头的颜色吗?

更新: 我试过设置 UIPopoverPresentationControllerbackgroundColor,但它似乎改变了箭头可能绘制的所有地方的颜色。我以前见过它起作用,但我无法确定它起作用的原因。请参阅将颜色设置为红色的屏幕截图。蓝色是弹出窗口中导航控制器的内容。它应该指向按钮。

UIPopoverPresentationControllerbackgroundColor 属性 应该会为您处理这个问题

更新

我已经多次使用这种方法,但从未在屏幕截图中看到过。您确定您使用的是 popoverPresentationController.backgroundColor 而不是在视图或容器上设置不同的背景颜色吗?下面是非居中弹出箭头的屏幕截图。视图控制器背景为绿色,popoverPresentationController.backgroundColor 为红色。显示在设置值的代码旁边。

更新 #2

我查看了您发布的项目并发现了问题(尽管我不完全确定为什么就是问题所在)。您正在 viewWillAppear: 下的呈现视图控制器中设置弹出框呈现控制器的 backgroundColor 属性。我怀疑在 之后 设置背景颜色是触发 iOS 10.

之前的错误的原因

如果您在呈现视图控制器的 onPopover: 方法中设置弹出框呈现控制器的 backgroundColor,您还设置了 sourceViewsourceRect 属性(以及之前你实际上调用了 presentViewController:),一切正常。