7

以前所有的对话框和文本字段都运行良好。但不是我不知道这些 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)

演示 1 演示 3

4

5 回答 5

4

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

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

当我开始搜索 UILabel 扩展时,使用 XCode 中的搜索功能,这些并没有出现在搜索结果中。因此,我建议您在项目中打开任何 3rd 方框架的源代码,并在其中单独搜索。UILabel 类肯定有一些问题。

于 2018-02-28T10:09:16.393 回答
2

在您的消息中添加换行符 (\n)。

于 2017-12-12T10:27:35.773 回答
1

您应该将attributedMessageString 与此处的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)
于 2017-12-12T11:30:44.917 回答
1

终于解决了

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

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)

}
于 2017-12-22T04:34:39.320 回答
0

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

if #available(iOS 9.0, *) {
        UILabel.appearance(whenContainedInInstancesOf: [UIAlertController.self]).numberOfLines = 0
    } else {
        // Fallback on earlier versions
    }
于 2017-12-19T09:04:29.457 回答