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

问题描述 投票:7回答:5

以前所有的对话框和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

ios swift3 uitextfield xcode8.2 uialertviewcontroller
5个回答
4
投票

我遇到了同样的问题并在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类肯定会搞乱一些东西。


2
投票

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


1
投票

你应该使用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)

1
投票

最后解决了

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

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

    let customUiLableView:UILabel
    let alert:UIAlertController

    if((message.count) < 100){
        alert = UIAlertController(title: "", message: "\n\n\n\n", 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: "\n\n\n\n\n\n", preferredStyle: .alert)
        customUiLableView = UILabel(frame: CGRect(x: 10, y: 0, width: 250, height: 160))
        customUiLableView.numberOfLines = 6
    }else{
        alert = UIAlertController(title: "", message: "\n\n\n\n\n\n\n\n", 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)

}

0
投票

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

if #available(iOS 9.0, *) {
        UILabel.appearance(whenContainedInInstancesOf: [UIAlertController.self]).numberOfLines = 0
    } else {
        // Fallback on earlier versions
    }
© www.soinside.com 2019 - 2024. All rights reserved.