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

时间:2016-08-29 23:47:34

标签: ios uipopovercontroller uipopoverbackgroundview

我想更改UIPopoverPresentationController用于指向其来源的箭头的颜色。我能看到这样做的唯一方法是继承UIPopoverBackgroundView并编写drawRect并自己绘制popover边框和箭头。这是一种痛苦,因为默认的弹出窗口中有一些细节,比如一切都是圆角。我希望尽可能让它在平台上尽可能多地感受到它。

我是否真的必须绘制自己的弹出箭头才能改变箭头的颜色?

更新:我已尝试设置backgroundColor的{​​{1}},但它似乎会改变箭头可能绘制的任何位置的颜色。我以前看过它的工作原理,但我无法确定它是什么让它起作用。查看将颜色设置为红色的屏幕截图。蓝色是弹出窗口中导航控制器的内容。它应该指向按钮。

Popover background color issue

1 个答案:

答案 0 :(得分:9)

UIPopoverPresentationController的{​​{1}}属性应该为您处理

更新

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

non-centered arrow on popover presentation controller

更新#2

我查看了您发布的项目并发现了问题(虽然我不完全确定为什么这是问题所在)。您正在popoverPresentationController.backgroundColor下的呈现视图控制器中设置popover表示控制器的backgroundColor属性。我怀疑在演示文稿发生后设置背景颜色如此是触发iOS 10之前的错误的原因。

如果您在展示视图控制器的viewWillAppear:方法中设置了弹出式展示控制器的backgroundColor,那么您还要设置onPopover:sourceView属性(在实际之前)致电sourceRect),一切正常。