2017-09-14 5 views
6

Bisher funktionieren alle Dialog und TextField gut. Aber ich weiß nicht, wie diese TextFields plötzlich auf Single-Line mit Triple geändert werden. (Wie eine Nachricht hier ...)Alle Alarmdialognachrichten und Textfelder wurden in einzelne Zeilen geändert. Bitte überprüfen Sie das Bild

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

+2

wo ist das Bild –

+0

Bitte überprüfen Sie die Bilder in der Post erwähnt. @Anbu – jazzbpn

+0

Ich habe versucht, Ihren Code zeigt es perfekt, ich denke, einige, wo Sie Aussehen verändert –

Antwort

2

Add Zeilenumbruch Zeichen (\ n) auf Ihre Nachricht.

+1

Entschuldigung !! Dieser ist keine gute Lösung für mich. Ich möchte Daten aus dem Internet abrufen und im Warndialog anzeigen. Bereits implementiert mit \ n new line tag. – jazzbpn

1

Sie attributedMessage String mit setValue Methode von UIAlertController verwenden sollten hier nur wie folgt:

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) 
+0

Bitte überprüfen Sie Ihre Antwort, bevor Sie die Frage beantworten. Problem: Typ 'NSAttributedStringKey' (auch 'NSString' genannt) hat kein Mitglied 'font' – jazzbpn

+0

Funktioniert nicht, Bitte geben Sie keine unrealistische Antwort. @iNoob – jazzbpn

0

Sie haben numberOfLines Eigenschaft UILabel zu setzen, da Standardwert ist 1 (einzeilig) & und den Wert von 0 bedeutet, no limit, wenn die Höhe des Textes die Anzahl der Zeilen erreicht oder die Höhe der Ansicht kleiner ist als die Anzahl der Zeilen, die Zeilen zulässig sind, wird der Text im Zeilenumbruchmodus abgeschnitten.

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

Sorry, arbeite nicht für mich. Bitte schauen Sie sich das erste Bild an, ich benutze diesen Code um den Dialog zu zeigen. let alert = UIAlertController (Titel: "", Nachricht: Nachricht, preferredStyle: UIAlertControllerStyle.alert) alert.addAction (UIAlertAction (Titel: "OK", style: UIAlertActionStyle.default, Handler: null)) viewController.present (alarm, animiert: true, completion: nil) – jazzbpn

1

Schließlich Gelöst

Ich löste dieses Problem, indem die benutzerdefinierte machen UILable innerhalb des UIViewController. Dies ist vielleicht nicht die gute Praxis, also lass mich bitte wissen, wenn jemand die bessere Lösung als diese findet.

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) 

} 
+1

Konnten Sie jemals die Ursache für dieses Problem anstelle der obigen Problemumgehung finden? Ich stehe vor dem gleichen Problem, dass alle meine Warnmeldungen in eine Zeile geändert wurden und ich bin mir sicher, dass sie schon lange vorher funktionieren. –

+0

Sorry, nicht bis heute. – jazzbpn

+0

@BatuhanC., Half mir die Anweisung auf dieser StackOverflow-Seite; https://stackoverflow.com/a/28545177/1179312 – ikel

0

Ich hatte das gleiche Problem und löste es nach 3 Tagen und Nächten. Da der UIAlertViewController UILabel verwendet, um die Nachricht anzuzeigen, habe ich im gesamten Projekt nach etwas gesucht, das UILabel verändert. Ich erkannte, dass kein Suchergebnis etwas von einigen Pods enthält, die definitiv "Label" -Schlüsselwörter in ihren Funktionsnamen und dergleichen haben. Ich beschloss, die Quellcodes für alle Pods aus ihren Repositories herunterzuladen und rekursiv in ihnen mit einem anderen einfachen Texteditor zu suchen und voila! Ein Typ entschied sich, die UILabel-Standardklasse zu überschreiben, anstatt sie in ihrem Pod zu unterklassifizieren. Die Täter Linien waren

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

Dies zeigte sich nicht mit Hilfe der Suchfunktion in XCode in den Suchergebnissen auf, als ich für UILabel Erweiterungen zu beginnen gesucht. Daher empfehle ich Ihnen, die Quellcodes eines Drittanbieter-Frameworks in Ihrem Projekt zu öffnen und separat in ihnen zu suchen. Es gibt auf jeden Fall etwas, was mit der UILabel-Klasse zu schaffen macht.

Verwandte Themen