Vielleicht könnten Sie das folgende mit nur einem UILabel
pro Zeile tun:
definieren ein linkes Wort wie „Coffee“ und rechten wie „£ 1.45“.
Machen Sie eine Zeichenfolge, indem Sie das linke Wort mit einem Leerzeichen und die rechts eins verketten.
definieren die width
und height
des Rahmens, dass Sie das Etikett mit dem Zeichenfolge wollen enthalten sein, mit CGSizeMake(width, height)
.
Schätzen Sie die Größe dieses Etikett mit sizeThatFits
die CGSize
Einschränkungen bietet, die Sie als Argument wollen.
Wenn die geschätzte Breite des Etiketts ist kleiner als die erforderlichen Breite, erhöhen Sie die Größe Ihres Etiketts, durch einen Raum zu Ihrem String und wiederholen Sie hinzufügen.
In Code:
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];
}
Ich habe die oben in meinem viewDidLoad
platziert und tat #import <QuartzCore/QuartzCore.h>
Markierung der Grenze des UILabel zu ermöglichen.
Hier ist ein Screenshot von meinem Arbeits Code:
Es arbeitet für die „Milch, skinny“ Linie zu, wie die Textausrichtung des Etiketts auf NSTextAlignmentLeft
gesetzt.
Hoffe, das hilft.
Ich glaube nicht, dass es einen Weg gibt, dies zu tun, ohne zwei Objekte zu haben, eines mit linker Ausrichtung und eines mit rechter Ausrichtung. Sogar CSS würde zwei Objekte benötigen, um dies zu erreichen. –
wir brauchen 2 Objekte entweder in HTML & CSS oder unserem nativen Code. Ich stimme @BrianShamblen zu. Die beste Sache ist für Web-Ansicht mit HTML und CSS gehen. –