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

Posted

技术标签:

【中文标题】如何在不绘制我自己的情况下更改 UIPopoverPresentationController 箭头颜色【英文标题】:How to change UIPopoverPresentationController's arrow color without drawing my own 【发布时间】:2016-08-29 23:47:34 【问题描述】:

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

我真的必须自己绘制弹出箭头来改变箭头的颜色吗?

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

【问题讨论】:

【参考方案1】:

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

更新

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

更新 #2

我查看了您发布的项目并发现了问题(尽管我不完全确定为什么这是问题所在)。您在viewWillAppear: 下呈现的视图控制器内设置弹出显示控制器的backgroundColor 属性。我怀疑像这样演示发生之后设置背景颜色是触发ios 10之前的错误的原因。

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

【讨论】:

等等,不。仅当箭头居中时才有效。如果箭头偏离中心,它会在箭头所在的整个矩形中绘制您设置的颜色。 并且它还在内容视图控制器的圆角处绘制它。 @TomHamming 这真的很奇怪......请查看我的更新答案。您是否在弹出框演示控制器上设置了一些其他可能发生冲突的属性?我在许多不同的箭头位置多次使用 backgroundColor 都没有问题。 Here 是我在 GitHub 上的示例代码。您的解决方案在 iOS 10 上确实很有效。 这确实是关键!谢谢。演示完成后进行更改似乎也是安全的。它必须在它呈现导致问题时对其进行更改。我会提交雷达,但 iOS 10 已经可以了。

以上是关于如何在不绘制我自己的情况下更改 UIPopoverPresentationController 箭头颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重绘图表的情况下刷新 jqplot 条形图

如何在不更改代码的情况下修改 wordpress 主题?

如何在不进行任何更改的情况下恢复推送的合并?

如何在不刷新页面的情况下“连续”更改背景颜色[重复]

如何将 UIPopover 附加到我绘制的矩形

如何在不更改时间窗口的情况下强制下一个节点访问 VRPTW