当 UIViewController 显示弹出框时,更改 CALayer 颜色与 UIView tintColor 同步

Posted

技术标签:

【中文标题】当 UIViewController 显示弹出框时,更改 CALayer 颜色与 UIView tintColor 同步【英文标题】:Change CALayer color in sync with UIView tintColor when a UIViewController presents a popover 【发布时间】:2020-07-28 08:30:47 【问题描述】:

ios 中,当 UIViewController 呈现一个弹出框时,其视图的 tintColor 将变为黑白颜色(这样,按钮看起来弹出框可见时不可点击)。当弹出框消失时,颜色会变回来。

UIView 有一个子类来保存徽章计数。该视图层的颜色应该与视图的 tintColor 具有相同的颜色。

如何在其父视图中同步子层的tintColor

// draw orange background layer with border  
override func draw(_ rect: CGRect) 
    layer.cornerRadius = rect.height / 2
    layer.borderColor = UIColor.orange.cgColor
    layer.borderWidth = 2
    layer.backgroundColor = UIColor.white.cgColor
    layer.masksToBounds = true

默认值:

提交:

【问题讨论】:

【参考方案1】:

在自定义 UIView 中覆盖 tintColorDidChange 并将 tintColor 设置为其中的图层 backgroundColor

override func tintColorDidChange() 
    layer.backgroundColor = tintColor.cgColor

【讨论】:

以上是关于当 UIViewController 显示弹出框时,更改 CALayer 颜色与 UIView tintColor 同步的主要内容,如果未能解决你的问题,请参考以下文章

出现弹出框时 UI 没有响应

使用 UINavigationController 在 UIViewController 之间切换

Swift - 呈现已呈现的弹出框时应用程序崩溃

显示弹出框时更改方向时应用程序崩溃。

在 iOS 8 中呈现弹出框时如何使屏幕模糊

可以在弹出框上应用 autoresizemask