如何在不绘制我自己的情况下更改 UIPopoverPresentationController 箭头颜色
Posted
技术标签:
【中文标题】如何在不绘制我自己的情况下更改 UIPopoverPresentationController 箭头颜色【英文标题】:How to change UIPopoverPresentationController's arrow color without drawing my own 【发布时间】:2016-08-29 23:47:34 【问题描述】:我想更改UIPopoverPresentationController
用来指向其源的箭头的颜色。我能看到的唯一方法是继承UIPopoverBackgroundView
并编写drawRect
并自己绘制弹出框边框和箭头。这很痛苦,因为默认弹出窗口中没有什么细节,比如所有东西的圆角。而且我想在平台上尽可能地让它有宾至如归的感觉。
我真的必须自己绘制弹出箭头来改变箭头的颜色吗?
更新:我已尝试设置 UIPopoverPresentationController
的 backgroundColor
,但它似乎改变了箭头可能绘制的任何地方的颜色。我以前见过它起作用,但我无法确定它起作用的原因。请参阅将颜色设置为红色的屏幕截图。蓝色是弹出框中导航控制器的内容。它应该指向按钮。
【问题讨论】:
【参考方案1】:UIPopoverPresentationController
的 backgroundColor
属性应该会为您处理这个问题
更新
我已多次使用这种方法,但从未见过您在屏幕截图中看到的内容。您确定您使用的是popoverPresentationController.backgroundColor
,而不是在视图或容器上设置不同的背景颜色吗?下面是非居中弹出箭头的屏幕截图。视图控制器背景为绿色,popoverPresentationController.backgroundColor 为红色。显示在设置值的代码旁边。
更新 #2
我查看了您发布的项目并发现了问题(尽管我不完全确定为什么这是问题所在)。您在viewWillAppear:
下呈现的视图控制器内设置弹出显示控制器的backgroundColor
属性。我怀疑像这样在演示发生之后设置背景颜色是触发ios 10之前的错误的原因。
如果您在呈现视图控制器的 onPopover:
方法中设置弹出框演示控制器的 backgroundColor
,您还设置了 sourceView
和 sourceRect
属性(在您实际调用 presentViewController:
之前),一切正常正确。
【讨论】:
等等,不。仅当箭头居中时才有效。如果箭头偏离中心,它会在箭头所在的整个矩形中绘制您设置的颜色。 并且它还在内容视图控制器的圆角处绘制它。 @TomHamming 这真的很奇怪......请查看我的更新答案。您是否在弹出框演示控制器上设置了一些其他可能发生冲突的属性?我在许多不同的箭头位置多次使用 backgroundColor 都没有问题。 Here 是我在 GitHub 上的示例代码。您的解决方案在 iOS 10 上确实很有效。 这确实是关键!谢谢。演示完成后进行更改似乎也是安全的。它必须在它呈现导致问题时对其进行更改。我会提交雷达,但 iOS 10 已经可以了。以上是关于如何在不绘制我自己的情况下更改 UIPopoverPresentationController 箭头颜色的主要内容,如果未能解决你的问题,请参考以下文章