ragazzi! Ho un'etichetta con più righe, lineBreakMode è impostato su UILineBreakModeWordWrap. Come posso determinare la larghezza dell'ultima riga? GrazieiOS. Determina la larghezza dell'ultima riga di UILabel
5
A
risposta
5
Ecco come l'ho fatto. Prima metti le linee della tua etichetta in NSArray e poi controlla la larghezza dell'ultima riga. In viewDidLoad:
NSArray* lines = [self getSeparatedLinesFromLbl:srcLabel];
NSString *lastLine=[lines lastObject];
float lastLineWidth=[lastLine sizeWithFont:srcLabel.font constrainedToSize:boundingSize lineBreakMode:NSLineBreakByWordWrapping].width;
E getSeparatedLinesFromLbl:
-(NSArray*)getSeparatedLinesFromLbl:(UILabel*)lbl
{
if (lbl.lineBreakMode != NSLineBreakByWordWrapping)
{
return nil;
}
NSMutableArray* lines = [NSMutableArray arrayWithCapacity:10];
NSCharacterSet* wordSeparators = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSString* currentLine = lbl.text;
int textLength = [lbl.text length];
NSRange rCurrentLine = NSMakeRange(0, textLength);
NSRange rWhitespace = NSMakeRange(0,0);
NSRange rRemainingText = NSMakeRange(0, textLength);
BOOL done = NO;
while (!done)
{
// determine the next whitespace word separator position
rWhitespace.location = rWhitespace.location + rWhitespace.length;
rWhitespace.length = textLength - rWhitespace.location;
rWhitespace = [lbl.text rangeOfCharacterFromSet: wordSeparators options: NSCaseInsensitiveSearch range: rWhitespace];
if (rWhitespace.location == NSNotFound)
{
rWhitespace.location = textLength;
done = YES;
}
NSRange rTest = NSMakeRange(rRemainingText.location, rWhitespace.location-rRemainingText.location);
NSString* textTest = [lbl.text substringWithRange: rTest];
CGSize sizeTest = [textTest sizeWithFont: lbl.font forWidth: 1024.0 lineBreakMode: NSLineBreakByWordWrapping];
if (sizeTest.width > lbl.bounds.size.width)
{
[lines addObject: [currentLine stringByTrimmingCharactersInSet:wordSeparators]];
rRemainingText.location = rCurrentLine.location + rCurrentLine.length;
rRemainingText.length = textLength-rRemainingText.location;
continue;
}
rCurrentLine = rTest;
currentLine = textTest;
}
[lines addObject: [currentLine stringByTrimmingCharactersInSet:wordSeparators]];
return lines;
}
+0
potresti aggiornare per iOS8 – suthar
1
Swift 3 (IOS 10,3)
extension UILabel {
func getSeparatedLines() -> [Any] {
if self.lineBreakMode != NSLineBreakMode.byWordWrapping {
self.lineBreakMode = .byWordWrapping
}
var lines = [Any]() /* capacity: 10 */
let wordSeparators = CharacterSet.whitespacesAndNewlines
var currentLine: String? = self.text
let textLength: Int = (self.text?.characters.count ?? 0)
var rCurrentLine = NSRange(location: 0, length: textLength)
var rWhitespace = NSRange(location: 0, length: 0)
var rRemainingText = NSRange(location: 0, length: textLength)
var done: Bool = false
while !done {
// determine the next whitespace word separator position
rWhitespace.location = rWhitespace.location + rWhitespace.length
rWhitespace.length = textLength - rWhitespace.location
rWhitespace = (self.text! as NSString).rangeOfCharacter(from: wordSeparators, options: .caseInsensitive, range: rWhitespace)
if rWhitespace.location == NSNotFound {
rWhitespace.location = textLength
done = true
}
let rTest = NSRange(location: rRemainingText.location, length: rWhitespace.location - rRemainingText.location)
let textTest: String = (self.text! as NSString).substring(with: rTest)
let fontAttributes: [String: Any]? = [NSFontAttributeName: font]
let maxWidth = (textTest as NSString).size(attributes: fontAttributes).width
if maxWidth > self.bounds.size.width {
lines.append(currentLine?.trimmingCharacters(in: wordSeparators) ?? "")
rRemainingText.location = rCurrentLine.location + rCurrentLine.length
rRemainingText.length = textLength - rRemainingText.location
continue
}
rCurrentLine = rTest
currentLine = textTest
}
lines.append(currentLine?.trimmingCharacters(in: wordSeparators) ?? "")
return lines
}
var lastLineWidth: CGFloat {
let lines: [Any] = self.getSeparatedLines()
if !lines.isEmpty {
let lastLine: String = (lines.last as? String)!
let fontAttributes: [String: Any]? = [NSFontAttributeName: font]
return (lastLine as NSString).size(attributes: fontAttributes).width
}
return 0
}
}
Uso
print(yourLabel.lastLineWidth)
Swift 3 (IOS 10,3)
Problemi correlati
- 1. Diminuisce la larghezza dell'ultima riga in multilinea UILabel
- 2. Determina la larghezza di tutti gli elementi figlio
- 3. Swift: Determina la dimensione dello schermo di iOS
- 4. Determina la larghezza di una larghezza DIV CSS3 dinamica Larghezza colonna fissa
- 5. UILabel rileva interruzioni di riga
- 6. UILabel con larghezza fissa e altezza flessibile
- 7. iOS: multilinea uilabel mostra solo una riga con caricamento automatico
- 8. Determina il numero di caratteri troncati in UILabel
- 9. calcolo dinamico della larghezza UILabel in UITableViewCell
- 10. Determina la larghezza della stringa nella tela HTML5
- 11. iOS - Shadow spread su UILabel
- 12. limitare la UILabel a 500 caratteri e Troncare la UIlabel in IOS
- 13. iOS - UILabel Auto-shrink con testo attribuito
- 14. iOS - UILabel cambia aspetto di un'etichetta disabilitata
- 15. Interruzioni di riga non funzionanti in UILabel
- 16. iOS Previene il timer UILabel "agitazione" quando i numeri cambiano
- 17. Determina la lettera in base a riga e col python
- 18. Impossibile ottenere UIAutomation iOS UILabel valore
- 19. Verifica del troncamento in UILabel - iOS, Swift
- 20. Giustifica il testo in UILabel iOS
- 21. determina se un carattere Unicode è a larghezza intera o a metà larghezza in C++
- 22. UILabel troncare la coda e saltare la parola non completa
- 23. iPhone - Regola larghezza UILabel in base al testo
- 24. AutoLayout per ridimensionare in modo dinamico altezza e larghezza UILabel
- 25. In iOS: come si adatta un UILabel al testo, senza modificarne la posizione?
- 26. AutoLayout di iOS - ottieni la dimensione della cornice larghezza
- 27. Ottieni la larghezza di un'estensione oggi per iOS
- 28. iOS mantenere le proporzioni di UIImageView ma riempire la larghezza
- 29. iOS - Cella di tabella personalizzata non intera larghezza di UITableView
- 30. Come regolare la dimensione del carattere per adattarlo all'altezza e alla larghezza di UILabel
non so di un modo per fare questo. Ma perché lo vuoi? Forse se sappiamo perché lo vuoi possiamo trovare un altro modo per risolvere il tuo problema. – Rob
Potrei immaginare una routine complicata in cui usi ripetutamente NSSTRING 'sizeWithFont: constrainedToSize: lineBreakMode:', aggiungendo una parola alla volta, capisci quale parola ti spinge alla riga successiva, e poi ripeti questo processo fino ad arrivare all'ultimo linea, e quindi un finale 'sizeWithFont: constrainedToSize: lineBreakMode:' per capire la larghezza di quella linea finale. – Rob
Ho usato questo approccio, ma sembra piuttosto complicato, quindi mi sono chiesto se c'è qualche buona soluzione per il problema. Comunque grazie! – leon4ic