所有警报对话框消息和文本字段都已更改为单行。请检查图片
All the alert dialog message and textField have been changed to single line. Please checkout the image
以前所有的对话框和文本字段都运行良好。但不是 我不知道这些 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)
在您的邮件中添加换行符 (\n)。
您应该使用 attributedMessage
字符串和 UIAlertController
的 setValue
方法,如下所示:
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)
您必须设置 numberOfLines
属性 of UILabel
,因为默认值为 1(单行)& 值 0 表示没有限制,如果文本的高度达到行数或视图高度小于允许的行数,文本将使用换行方式截断。
if #available(iOS 9.0, *) {
UILabel.appearance(whenContainedInInstancesOf: [UIAlertController.self]).numberOfLines = 0
} else {
// Fallback on earlier versions
}
终于解决了
我通过在 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)
}
我遇到了同样的问题,折腾了3天3夜解决了。由于 UIAlertViewController 使用 UILabel 来显示消息,因此我在整个项目中坚定地搜索修改 UILabel 的东西。我意识到没有任何搜索结果包含某些 pods 中肯定在其函数名称等中具有 "label" 关键字的任何内容。我决定从他们的存储库下载所有 pods 的源代码,并使用另一个简单的文本编辑器在其中递归搜索,瞧!有些人决定覆盖默认的 UILabel class 而不是在他们的 pod 中 subclassing 它。罪魁祸首是
extension UILabel {
...
override open func draw(_ rect: CGRect) { ... }
override open var intrinsicContentSize: CGSize { ... }
...
}
当我开始搜索 UILabel 扩展时,使用 XCode 中的搜索功能,这些没有显示在搜索结果中。所以,我建议你在你的项目中打开任何 3rd 方框架的源代码,并在其中单独搜索。 UILabel class.
肯定有问题
以前所有的对话框和文本字段都运行良好。但不是 我不知道这些 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)
在您的邮件中添加换行符 (\n)。
您应该使用 attributedMessage
字符串和 UIAlertController
的 setValue
方法,如下所示:
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)
您必须设置 numberOfLines
属性 of UILabel
,因为默认值为 1(单行)& 值 0 表示没有限制,如果文本的高度达到行数或视图高度小于允许的行数,文本将使用换行方式截断。
if #available(iOS 9.0, *) {
UILabel.appearance(whenContainedInInstancesOf: [UIAlertController.self]).numberOfLines = 0
} else {
// Fallback on earlier versions
}
终于解决了
我通过在 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)
}
我遇到了同样的问题,折腾了3天3夜解决了。由于 UIAlertViewController 使用 UILabel 来显示消息,因此我在整个项目中坚定地搜索修改 UILabel 的东西。我意识到没有任何搜索结果包含某些 pods 中肯定在其函数名称等中具有 "label" 关键字的任何内容。我决定从他们的存储库下载所有 pods 的源代码,并使用另一个简单的文本编辑器在其中递归搜索,瞧!有些人决定覆盖默认的 UILabel class 而不是在他们的 pod 中 subclassing 它。罪魁祸首是
extension UILabel {
...
override open func draw(_ rect: CGRect) { ... }
override open var intrinsicContentSize: CGSize { ... }
...
}
当我开始搜索 UILabel 扩展时,使用 XCode 中的搜索功能,这些没有显示在搜索结果中。所以,我建议你在你的项目中打开任何 3rd 方框架的源代码,并在其中单独搜索。 UILabel class.
肯定有问题