也许你可以做只有一个UILabel
每行:
定义留字,如“咖啡”和类似“1.45£”一个合适的人。
通过连接左边的单词和空格以及右边的单词来构造一个字符串。
定义width
,并要与 字符串标签要包含在,与CGSizeMake(width, height)
框架height
。
使用sizeThatFits
估计标签的大小,提供 CGSize
您希望作为参数的约束。
如果标签的预估宽度小于要求的宽度,请通过为 字符串添加一个空格并重复以增加标签的大小。
在代码:
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];
}
我已经把上面我viewDidLoad
内,做了#import <QuartzCore/QuartzCore.h>
允许的UILabel的边界标志。
这里是我工作的代码截图:
它的工作原理为“牛奶,骨感”太行作为标签的文本对齐方式设置为NSTextAlignmentLeft
。
希望这会有所帮助。
我不认为有没有办法做到这一点,没有两个对象,一个左对齐,一个右对齐。即使CSS需要两个对象来实现这一点。 –
我们需要HTML&CSS或我们的本地代码中的2个对象。我同意@BrianShamblen。最好的事情是用HTML和CSS进行web查看。 –