Forse si potrebbe fare quanto segue con una sola UILabel
per riga:
definire una parola di sinistra come "Caffè" e un diritto uno come "£ 1.45".
Creare una stringa concatenando la parola sinistra con uno spazio e la destra di .
Definire il width
e height
della cornice che si desidera che l'etichetta con quella stringa da inserire nei, con CGSizeMake(width, height)
.
Stimare le dimensioni di tale etichetta utilizzando sizeThatFits
fornendo i vincoli CGSize
che si desidera come argomento.
Se la larghezza stimata dell'etichetta è inferiore alla larghezza richiesta, aumentare la dimensione dell'etichetta, aggiungendo uno spazio alla stringa e ripetere.
in codice:
NSArray *leftWords = @[@"Coffee", @" milk, skinny", @"Danish Pastry", @"Coca Cola", @"Full English Bfst"];
NSArray *rightWords = @[@"£1.45", @"", @"£1.75", @"£1.10", @"£12.50"];
CGFloat xOffset = 5;
CGFloat yOffset = 60;
CGFloat labelHeight = 44;
CGFloat labelWidth = 300;
for (int i = 0; i < leftWords.count; i ++) {
UILabel *aLabel = [[UILabel alloc] initWithFrame:CGRectMake(xOffset, yOffset + i * labelHeight, labelWidth, labelHeight)];
aLabel.numberOfLines = 1;
aLabel.textAlignment = NSTextAlignmentLeft;
aLabel.layer.borderColor = [UIColor greenColor].CGColor;
aLabel.layer.borderWidth = 1.0f;
NSString *leftWord = [leftWords objectAtIndex:i];
NSString *rightWord = [rightWords objectAtIndex:i];
NSMutableString *spaces = [[NSMutableString alloc] initWithString:@" "];
const CGFloat MAX_WIDTH = 310;
CGSize maxLabelSize = CGSizeMake(MAX_WIDTH, CGFLOAT_MAX);
CGSize expectedSize = CGSizeMake(0, 0);
CGFloat expectedWidth = 0.0;
NSString *phrase = @"";
do {
phrase = [NSString stringWithFormat:@"%@%@%@", leftWord, spaces, rightWord];
aLabel.text = phrase;
expectedSize = [aLabel sizeThatFits:maxLabelSize];
expectedWidth = expectedSize.width;
// Increase spaces
[spaces appendString:@" "];
} while (expectedWidth < MAX_WIDTH);
CGRect frame = aLabel.frame;
frame.size = expectedSize;
aLabel.frame = frame;
[self.view addSubview:aLabel];
}
ho messo sopra nel mio viewDidLoad
e ha fatto #import <QuartzCore/QuartzCore.h>
per consentire la marcatura del bordo della UILabel.
Ecco uno screenshot del mio codice di lavoro:
Si lavora per il "latte magro" linea troppo come l'allineamento del testo dell'etichetta è impostato su NSTextAlignmentLeft
.
Spero che questo aiuti.
fonte
2013-12-27 11:59:44
Non penso che ci sia un modo per farlo senza avere due oggetti, uno con allineamento a sinistra e uno con allineamento a destra. Persino i CSS richiederebbero due oggetti per raggiungere questo obiettivo. –
abbiamo bisogno di 2 oggetti in HTML e CSS o nel nostro codice nativo. Sono d'accordo con @ BrianShamblen. La cosa migliore è andare per la visualizzazione Web con HTML e CSS. –