2016-05-08 11 views
0

In meiner App versuche ich, den UILable-Zeittext wie WhatsApp auszurichten, wenn der letzte Satz eines UITextView-Nachrichtentextes zu lang ist in die nächste Zeile geschoben werden. Also versuche ich tatsächlich, die UILabel-Zeit gemäß der UITextView-Nachrichtenbox auszurichten.So erhalten Sie die Länge des Textes für die letzte Zeile in UITextView

message box time layout image

This is a text message. 7:16PM 


This is a longer 
text message. 7:15PM 


This is an even longer 
text message till end. 
       7.15PM 

Ein Weg, ich denken konnte, war mit der Breite des UITextView UITextView Klasse und ergreifen Sie die Länge der letzten Zeile und berechnen Sie die Textbreite im Vergleich zu verwenden, zu wissen, ob es übersteigt aber kein Glück . Gibt es irgendeinen Weg?

+0

Wird Ihr Zeittext an Ihren Nachrichtentext angehängt? Wenn ja, dann musst du das nicht tun. Sie müssen 2 Kontrollen hier eine für Nachricht und andere für Zeit verwenden. –

+0

Hallo, nein, es verwendet 2 separate Komponenten und nicht zusammengefügt – ken

Antwort

0

Dies ist der Code, den ich geschrieben habe, der mein Problem gelöst hat. Danke an Greg, dass er mich in die richtige Richtung gelenkt hat.

+ (BOOL)didTextMoveToNewline:(NSString *)text previousSize:(CGSize)previousSize { 
    UIFont *messageBubbleFont = [UIFont systemFontOfSize:14.0f]; 
    float maximumTextWidth = 188; 

    NSString *finalText = [[NSString alloc] init]; 
    finalText = [NSString stringWithFormat:@"%@ 10:00PM ", text]; 
    CGRect stringRect = [finalText boundingRectWithSize:CGSizeMake(maximumTextWidth, CGFLOAT_MAX) 
              options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading) 
             attributes:@{ NSFontAttributeName : messageBubbleFont } 
              context:nil]; 

    CGSize stringSize = CGRectIntegral(stringRect).size; 

    if (stringSize.height > previousSize.height) 
     return YES; 
    else 
     return NO; 
} 
-1

Der Hack würde automatisch eine Leerstelle die Länge der Zeit bis zum Ende jeder Nachricht hinzufügen.

let userMessageLabel.text = userMessage + "  " 

Dann die Zeit immer überlappen die letzte Zeile. Wenn die Anzahl der Leerzeichen korrekt ist, werden Text und Uhrzeit nicht berührt.

+0

hi dies wird nicht funktionieren, da die UITextView und UILabel separate Komponenten sind und mit Einschränkungen ausgerichtet sind. – ken

+0

eigentlich hast du mich in die richtige Richtung des Hacks gezeigt. Was ich tun muss, ist den Platz am Ende hinzufügen und boundingRectWithSize verwenden, um die Höhe vor und nach dem Anhängen zu vergleichen. Vielen Dank! – ken

Verwandte Themen