【问题标题】:All of my UIAlertController messages became single line我所有的 UIAlertController 消息都变成了单行
【发布时间】:2018-02-25 18:35:43
【问题描述】:

我不确定这是否是罪魁祸首,但我对这个项目所做的最大改变是几天前升级到 Swift 4。我知道我的 UIAlertController 消息在需要时显示为多行,但今天我偶然意识到它们都变成了单行并且最后有省略号。由于我从 API 显示这些消息,因此我不能使用“\n”。代码很简单;

let alert = UIAlertController(title: "Title", message: "Long message that must be shown as multiline", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { (action: UIAlertAction!) in
    alert.dismiss(animated: true, completion: nil)
}))
present(alert, animated: true, completion: nil)

我检查了一些其他相关问题,但没有一个对我有用。最近有人问这个问题,但没有得到答案,并且发布了一个 hacky 解决方法作为解决方案;

All the alert dialog message and textField have been changed to single line. Please checkout the image

非常感谢任何关于检查内容的建议。

【问题讨论】:

  • 我刚刚在 Xcode 上测试过,没有任何问题。所以我的问题是你使用的 API 是什么?
  • @Jake API 是我自己开发的 API,我也在 Android 应用程序中使用它。当我打印响应的 JSON 字符串时,整个消息就在那里。正如我所说,我很确定这在不久前还有效,所以一定有什么东西破坏了它。你用 Swift 4 试过了吗?
  • 是的,我是。我在警报消息中打印了 3 或 4 行。
  • 那么,如果你从你的 api 中提取消息,那么消息中会放置什么类型的数据?您是否尝试将其强制转换为String
  • @Jake 响应为 JSON,消息为字符串。与API无关,因为我尝试在代码中手动输入消息,仍然是一行。

标签: swift uialertcontroller


【解决方案1】:

不知道为什么投反对票,但我在拔掉头发 3 天后发现了这个问题。我一直在使用的第 3 方 Pod 中有一个 UILabel 扩展。它的代码被标记为“锁定”,所以我认为这就是它之前没有出现在搜索结果中的原因。我不得不从他们的存储库中下载所有 pod 的源代码并在里面搜索。它覆盖了默认 UILabel 的这些函数和属性,而不是创建自己的 UILabel 子类;

override open func draw(_ rect: CGRect) {}
override open var intrinsicContentSize: CGSize {}

由于 UIAlertViewController 使用 UILabel 来显示消息,我尝试注释掉这些行并且我的问题消失了。如果有人遇到同样的问题,请在您的代码和嵌入式库源代码中搜索 UILabel 扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多