gpt4 book ai didi

ios - UIAlertController 前景在不应该的时候变暗

转载 作者:可可西里 更新时间:2023-11-01 02:05:33 25 4
gpt4 key购买 nike

我有一个奇怪的问题影响了我的应用程序中显示的所有许多 UIAlertControllers - AlertControllers 的白色前景显得暗淡,或者亮度低于应有的水平。

描述它的最简单方法是通过将相关代码放在一个新的“测试”单 View 应用程序中来说明我获得的期望和预期效果(Swift 3 - 我应该注意到实际的应用程序是一个单 View 应用程序使用 swift 2.3)。

在我的“测试”应用程序中,下面的代码使用已弃用的 AlertView 来显示示例消息,然后构建一个 AlertController 并在“之后”立即显示。除了突出显示前景“白色”中的对比度外,无需使用 AlertView - 如果我注释掉 AlertView,问题行为是相同的。

有问题的行为: 4 images comparing alertcontroller in Test app vs real app

图片 1:测试应用:显示 AlertView,然后在其后面显示 AlertController。注意 AlertView 前景的白度/亮度。

图片 2:测试应用:当关闭 AlertView 时,AlertController 成为最上面的 View Controller ,正如预期和期望的那样,它的前景亮度与之前的 AlertView 完全相同

图片 3:真实应用:相同的代码,也位于 viewDidAppear 中 - AlertView 以预期的白度/亮度显示

图片 4:真实应用:当关闭 AlertView 时,AlertController 位于最上方,但它的前景远没有 AlertView 或测试应用示例中那样亮/白,图片 2。

如前所述,即使我消除了 AlertView 步骤(这只是为了对比),行为也是相同的。

一个进一步的观察——通常当我观察行为时,当受影响的 AlertController 第一次出现时,就像大约 1/4 或 1/8 秒一样,它的前景是正确的白度/亮度,但随后根据所述问题,它很快就会变暗。

另一个观察结果——真实应用程序中的一些 AlertControllers 以正确的亮度级别正确显示,但许多其他的则不然。

最后一个观察 - 我在 Xcode 中使用了“View UI Hierarchy”,似乎没有任何东西“位于”受影响的 AlertController 之上。

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}


override func viewDidAppear(_ animated: Bool) {


UIAlertView(title: "My AlertView Title", message: "My AlertView Message", delegate: self, cancelButtonTitle: "OK").show()

let alertTitle = "My AlertController Title"
let msg = "\r\r\r\r\r\r\r\rMy AlertController Msg"

let alertController = UIAlertController(title: alertTitle, message: msg, preferredStyle: .alert)

let cancelAction = UIAlertAction(title: "Don't show this again", style: .cancel) { (action:UIAlertAction!) in
print("Dismiss button pressed")

}
alertController.addAction(cancelAction)

let OKAction = UIAlertAction(title: "Action 1", style: .default) { (action:UIAlertAction!) in

print("I'm action1!!")
}

alertController.addAction(OKAction)

let OK2Action = UIAlertAction(title: "Action2", style: .default) { (action:UIAlertAction!) in

print("I'm action2")
}

alertController.addAction(OK2Action)

present(alertController, animated: false, completion: nil)


}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

非常感谢收到有关此拼图的任何帮助,谢谢!

编辑:

感谢@Richard G 让我走上正轨 - 我仍然有问题,但更清晰了。

因此,如果您并排查看下面的两个屏幕截图,它们都来自真实的应用程序,都使用上面显示的代码生成 UIAlertController(我现在删除了 UIAlertView 行,因为它不需要) ,左边的和右边的唯一区别就是右边的加了这3行代码:

let backView = alertController.view.subviews.last?.subviews.last 
backView?.layer.cornerRadius = 10.0
backView?.backgroundColor = UIColor.whiteColor()

side by side UIAlertControllers 1 transparent 1 not

根据 Apple 的说法,“UIAlert Controller 类旨在按原样使用,不支持子类化。此类的 View 层次结构是私有(private)的,不得修改。”好的,所以这是对它的入侵,它证明 alertController 在显示它之前以某种方式获得了部分透明的 backgroundColor。

通过将 backgroundColor 设置为 UIColor.whiteColor() 问题得到解决,但解决方案应该是不必要的 - 这个问题到底是怎么出现的?

当 Apple 甚至不向我公开该属性以便我能够设置时,backgroundColor 是如何以某种方式设置为具有透明度的?

非常感谢收到的任何答复!

最佳答案

看到您上传的图片后,我可以提几点。

  • 如果您注意到,UIAlertController 有点透明。

  • 由于 UIAlertController 是透明的,所以背景会影响警报 Controller 的外观。

注意:案例 1 和 2 背景为白色,案例 3 和 4 背景为黑色。

所以你可以做些什么来使背景像案例 1 和案例 2(来自图像)一样明亮。

**编辑:**

要更改 UIAlertController 的背景颜色,您可以这样做...

let subView = alertController.view.subviews.first!;
var alertContentView = subView.subviews.first!;
alertContentView.backgroundColor = UIColor.darkGray;
alertContentView.layer.cornerRadius = 5;

关于ios - UIAlertController 前景在不应该的时候变暗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43087618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com