У меня есть UiTextView в том, что я хочу, чтобы оправдать текст, может кто-нибудь мне помочь, чтобы это сделатьКак оправдать текст в UITextView?
1
A
ответ
1
Это не похоже на его доступное в настоящее время только с обычным api, но вот это реляционное решение stackoverflow.
0
Это может помочь, я сделал это для UILabel, он не идеален, я просто добавить пробелы, пока каждая строка не заполняет ширину прямоугольника лейбла.
+ (void) justifyText:(UILabel*) label
{
NSString *text = label.text;
text = [text stringByReplacingOccurrencesOfString:@"\n" withString:@" "];
UIFont *font = label.font;
CGRect rect = label.frame;
NSArray *wordArray = [text componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSMutableString *lineBreakText = [NSMutableString stringWithString:@""];
NSMutableArray *lines = [NSMutableArray array];
for (NSInteger i = 0; i < [wordArray count]; ++i)
{
NSMutableString *testStr = [NSMutableString stringWithString: lineBreakText];
if (i != 0)
{
[testStr appendString:@" "];
}
[testStr appendString:[wordArray objectAtIndex:i]];
CGSize testSize = [testStr sizeWithFont:font constrainedToSize:rect.size lineBreakMode:UILineBreakModeCharacterWrap];
if (testSize.height > [font lineHeight])
{
[lines addObject:lineBreakText];
lineBreakText = [NSMutableString stringWithString:@""];
[lineBreakText appendString:[wordArray objectAtIndex:i]];
}
else
{
if (i != 0)
{
[lineBreakText appendString:@" "];
}
[lineBreakText appendString:[wordArray objectAtIndex:i]];
}
if (i >= [wordArray count] - 1)
{
[lines addObject:lineBreakText];
}
}
NSMutableString *spacingText = [NSMutableString stringWithString:@""];
for (NSInteger i = 0; i < [lines count] - 1; ++i)
{
NSString *line = (NSString*)[lines objectAtIndex:i];
NSMutableString *spacedStr = [NSMutableString stringWithString:line];
NSArray *wordArray = [text componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSInteger spacesCount = [wordArray count] - 1;
if (spacesCount <= 0)
{
continue;
}
NSRange findInRng = NSMakeRange(0, [spacedStr length]);
NSRange spaceRng = [spacedStr rangeOfString:@" " options:0 range:findInRng];
CGSize testSize = [spacedStr sizeWithFont:font constrainedToSize:rect.size lineBreakMode:UILineBreakModeCharacterWrap];
while (testSize.height <= [font lineHeight])
{
if (spaceRng.location == NSNotFound)
{
findInRng = NSMakeRange(0, [spacedStr length]);
spaceRng = [spacedStr rangeOfString:@" " options:0 range:findInRng];
}
[spacedStr insertString:@" " atIndex:spaceRng.location];
testSize = [spacedStr sizeWithFont:font constrainedToSize:rect.size lineBreakMode:UILineBreakModeCharacterWrap];
findInRng = NSMakeRange(spaceRng.location + 2, [spacedStr length] - spaceRng.location - 2);
spaceRng = [spacedStr rangeOfString:@" " options:0 range:findInRng];
}
if (i != 0)
{
[spacingText appendString:@"\n"];
}
[spacingText appendString:spacedStr];
}
[spacingText appendString:@"\n"];
[spacingText appendString:(NSString*)[lines lastObject]];
[label setLineBreakMode:UILineBreakModeTailTruncation];
[label setText:spacingText];
}
4
В IOS 6 вы можете сделать выравнивание текста с помощью этого кода
UITextView *textView = //init your text view
textView.textAlignment = NSTextAlignmentJustified;
возможно дубликат [выравнивание по ширине в UITextView - iPhone] (http://stackoverflow.com/questions/1301519/justified -alignment-в-UITextView-Iphone) –