所有警报对话框消息和textField都已更改为单行。请检查图像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了所有警报对话框消息和textField都已更改为单行。请检查图像相关的知识,希望对你有一定的参考价值。

以前所有的对话框和textField都运行良好。但不是我不知道这些TextFields如何突然变为单行三联。 (就像这里的一些消息......)

    let alert = UIAlertController(title: "Cancel Booking !!", message: "Are you sure you want to cancel your booking?", preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "No", style: .default, handler: nil))
    alert.addAction(UIAlertAction(title: "Yes", style: .default, handler: self.cancelMessageDialog))
    self.present(alert, animated: true, completion: nil)

Demo 1 Demo 3

答案

我遇到了同样的问题并在3天3夜后解决了。由于UIAlertViewController使用UILabel来显示消息,因此我坚定地在整个项目中搜索修改UILabel的内容。我意识到没有任何搜索结果包含一些在功能名称中肯定有“标签”关键字的pod。我决定从他们的存储库下载所有pod的源代码,并使用另一个简单的文本编辑器在其中递归搜索,瞧!有些人决定覆盖默认的UILabel类,而不是在它们的pod中继承它。罪魁祸首是

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

当我搜索UILabel扩展时,我们在XCode中使用搜索功能时没有在搜索结果中显示这些内容。因此,我建议您在项目中打开任何第三方框架的源代码,并在其中单独搜索。 UILabel类肯定会搞乱一些东西。

另一答案

在邮件中添加换行符( n)。

另一答案

你应该使用attributedMessage字符串和setValue UIAlertController方法,如下所示:

    let attributedString = NSAttributedString(string: "My long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long textMy long text",
                                              attributes: [NSAttributedStringKey.font : UIFont(name: "Avenir-Light", size: 20)!])

    let alert = UIAlertController(title: "Title", message: "", preferredStyle: .alert)

    alert.setValue(attributedString, forKey: "attributedMessage")

    let yesAction = UIAlertAction(title: "Yes", style: .default) { (action) in
    }
    let noAction = UIAlertAction(title: "No", style: .cancel) { (action) in
    }

    alert.addAction(noAction)
    alert.addAction(yesAction)

    present(alert, animated: true, completion: nil)
另一答案

最后解决了

我通过在UIViewController中创建自定义UILabel来解决这个问题。这可能不是一个好习惯,所以如果有人找到更好的解决方案,请告诉我。

func showTestAlert(message:String , viewController:UIViewController){

    let customUiLableView:UILabel
    let alert:UIAlertController

    if((message.count) < 100){
        alert = UIAlertController(title: "", message: "



", preferredStyle: .alert)
        customUiLableView = UILabel(frame: CGRect(x: 10, y: 0, width: 250, height: 120))
        customUiLableView.numberOfLines = 4
    }else if((message.count) < 200){
        alert = UIAlertController(title: "", message: "





", preferredStyle: .alert)
        customUiLableView = UILabel(frame: CGRect(x: 10, y: 0, width: 250, height: 160))
        customUiLableView.numberOfLines = 6
    }else{
        alert = UIAlertController(title: "", message: "







", preferredStyle: .alert)
        customUiLableView = UILabel(frame: CGRect(x: 10, y: 0, width: 250, height: 200))
        customUiLableView.numberOfLines = 8
    }
    customUiLableView.text = message
    customUiLableView.textAlignment = .center
    customUiLableView.textColor = UIColor.darkGray
    customUiLableView.font = UIFont(name: "Helvetica", size: 16.0)

    let action = UIAlertAction(title: "OK", style: .default, handler: nil)
    alert.view.addSubview(customUiLableView)
    alert.addAction(action)

    viewController.present(alert, animated: true, completion: nil)

}
另一答案

您必须设置numberOfLinesUILabel属性,因为默认值为1(单行)&而值0表示没有限制,如果文本的高度达到行的numberOfLines或视图的高度小于numberOfLines如果允许行,则使用换行符模式截断文本。

if #available(ios 9.0, *) {
        UILabel.appearance(whenContainedInInstancesOf: [UIAlertController.self]).numberOfLines = 0
    } else {
        // Fallback on earlier versions
    }

以上是关于所有警报对话框消息和textField都已更改为单行。请检查图像的主要内容,如果未能解决你的问题,请参考以下文章

iTunes Connect 和 Xcode 8:您的应用程序已更改为无效的二进制文件

Textfield 甚至是空的,但在 Swift 中不认为是空的

Android:API 15 的警报对话框兼容大于 8 的 API

c#和Unity,更新已更改为CSV文件的记录

已更改为 1.6

是否可以在另一个共享对话框的顶部显示警报消息