我正在从我的plist中解析一个字符串并尝试将其分成两部分,以便根据中断将它们显示为两行或三行。
NSArray * parts = [text componentsSeparatedByString:@"\n"]; // this text is coming from plist.
int nthLine = 0;
for(NSString *str in parts)
{
CGRect outerFrame = CGRectMake(frame1.origin.x, frame1.origin.y + 45*nthLine, frame1.size.width, 45);
SFNDoorStyledView * question = [[SFNDoorStyledView alloc]initWithFrame:outerFrame];
question.backgroundColor = [UIColor clearColor];
question.tag = 2;
[question drawString:text inRect:CGRectMake(0,0,500,150) usingFontNamed:@"Futura-Bold" size:40.0 lineSpacing:40.0 kernValue:-3.0 color:@"#7d7066"];
[self.view addSubview:question];
}
nthLine = nthLine +1;
答案 0 :(得分:3)
请注意在不同情境中的含义。
在此背景下
NSArray * parts = [text componentsSeparatedByString:@"\n"];
\ n被解释为换行符。
在你的plist中\ n将是实际的字符\和n
您可以使用option-enter将换行符添加到plist中,然后使用上面的代码或更好的代码:
NSArray * parts = [text componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
或者,如果您想使用此自定义'\ n'分隔符,您可以使用
NSArray * parts = [text componentsSeparatedByString:@"\\n"];
答案 1 :(得分:0)
考虑使用UILabel
来保存您的文本,您可以根据字符串本身动态调整大小。无需在字符串中包含\n
。只需将标签大小/约束到您需要的宽度,然后根据字体和字体大小等其他属性为您计算高度。这是一个代表性片段。
// Size the label based on the font and actual text
UILabel *l = [[[UILabel alloc] initWithFrame:CGRectMake(10, 5, 300, 50)] autorelease];
l.font = [UIFont boldSystemFontOfSize:14.0];
l.lineBreakMode = UILineBreakModeWordWrap;
l.textAlignment = UITextAlignmentCenter;
l.numberOfLines = 0; // Allow for as many lines as needed
l.backgroundColor = [UIColor clearColor];
CGSize constraintSize = CGSizeMake(300, MAXFLOAT);
CGSize labelSize = [l.text sizeWithFont:l.font
constrainedToSize:constraintSize
lineBreakMode:UILineBreakModeWordWrap];
CGRect frame = l.frame;
frame.size = labelSize;
// Center it
frame.origin.x = floor((320.0 - labelSize.width) / 2.0);
l.frame = frame;
[v addSubview:l];
答案 2 :(得分:0)
检查行分隔符是否实际为\n
。它也可能是\r
。因此,使用componentsSeparatedByString:@"\r\n"
可能会有所帮助。
答案 3 :(得分:0)
实际上plist会将您的字符串保存为文本。因此,如果您输入\ n它将其作为文本而不是换行符。尽管这样做我只打破了plist中的字符串。例如:如果你有一个字符串,你每月的当前收入是多少?而你想要从收入中打破它。然后你可以写下什么是你的,然后按alt + enter并在新行中输入文字。