我有NSString字符串,表示HH:MM:SS中的时间,但是HH和MM的数字可能会被省略。
我需要像这样对齐这些值的列:
1:01:43
43:23
7:00
最简单的方法是什么?
答案 0 :(得分:13)
使用NSString类中提供的stringWithFormat方法。像这样:
NSString * dateStr = @"05:30";
NSString * formattedStr = [NSString stringWithFormat:@"%8s", [str UTF8String]];
%8s中的 8 是您在格式化字符串中需要的精确数字位数(或者在本例中为字符)。短于指定精度的输入字符串将左边填充空格,字符串长度将被截断。您可以阅读有关printf here的格式字符串的更多信息。
修改强> 感谢@Peter指出这一点。标准C中的格式说明符与目标C之间存在一些(次要)差异。请参阅有关格式字符串说明符here的Apples文档。
答案 1 :(得分:4)
填充代码不同但可能有帮助
NSString *st = [@"abc" stringByPaddingToLength: 9 withString: @"." startingAtIndex:0];
ABC ......
[@"abc" stringByPaddingToLength: 2 withString: @"." startingAtIndex:0];
AB
[@"abc" stringByPaddingToLength: 9 withString: @". " startingAtIndex:1];
abc。 。
注意填充中的第一个字符是空格
答案 2 :(得分:2)
我认为没有一种简单的方法。您可以在NSString
上编写一个类别方法来执行此操作。
- (NSString *)stringByPaddingLeftToLength:(NSUInteger)aLength withString:(NSString *)padString {
NSInteger lengthToPad = aLength - [self length];
if ( lengthToPad > 0 ) {
NSString * padding = [@"" stringByPaddingToLength:lengthToPad withString:padString startingAtIndex:0];
NSString * paddedString = [padding stringByAppendingString:self];
return paddedString;
} else {
return [[self copy] autorelease];
}
}
答案 3 :(得分:1)
如果你指的是一个固定的点宽度,NSTextField(Cocoa)和UILabel(Cocoa Touch)都允许你设置对齐。对于NSTextView和自定义绘图,您需要使用指定的对齐方式制作NSParagraphStyle(仅限AppKit)或CTParagraphStyle。
答案 4 :(得分:1)
如果您希望它与比例字体(即,不是等宽字体)明确对齐,那么您应该为字符串的每个组件使用不同的视图。
[hour]-[:]-[minute]-[:]-[second]
[hour]-[:]-[minute]-[:]-[second]
[hour]-[:]-[minute]-[:]-[second]
其中[things]
中的每一个都是不同的UILabel
答案 5 :(得分:0)
此解决方案适用于iOS:
在iOS中,您可以使用UILabel并右对齐它们。当然,只有使用“固定字体”(例如Courier New)才能完美对齐。 如果必须使用比例字体,唯一的方法是使用NSString + UIKit扩展来在视图绘制上下文中的固定位置绘制字符串的所有字符: 理想情况下,流程是: 1.计算最长字符串的长度 2.通过添加额外的空间来填充所有其他字符串 3.然后为每个字符串迭代每个字符并将其绘制为特定位置(不要复制并粘贴此代码,只需使用它来创建一个想法;这是类似obj-c的伪代码)
CGFloat x=0; // the string start let's say at x=0
CGFloat dx=40; // distance between characters
for(NSInteger i=0;i<[myString length];i++) {
NSString *char = [myString substringWithRange:NSRangeMake(i,1)];
[char drawAtPoint:CGPointMake(x,y) withFont:myFont];
x+=dx;
}
当然必须根据字体大小选择dx。