みなさん、ありがとうございました!これは私にいくつかのアイデアを与え、問題を解決することができました。これが同様の問題を抱えている他の誰かに役立つことを願っています。まず、問題の説明をもう一度明確にするために、結果は次の形式になります。
NSString * result = [NSString stringWithFormat:@"%@ = %@", answerString, answerNumber];
UITextViewコンテンツビューの行数を計算することで(UITextViewをそのコンテンツに合わせてサイズ変更するにはどうすればよいですか?)、次のアプローチで問題を解決できました。
まず、UITextViewの行数を回答がある場合とない場合の両方で比較します。行数が異なる場合、これはUITextViewが結果を新しい行に分割することを決定したことを意味します。その場合、結果を再フォーマットして、番号の前に手動で改行を追加する必要があります。負の符号(数値の一部)は、改行の最初の文字です。
- (int) numberOfLines: (NSString *) result {
UITextView *myTextView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 255, 0)];
myTextView.text = result;
CGRect frame = myTextView.frame;
frame.size.height = myTextView.contentSize.height;
myTextView.frame = frame;
int numLines = myTextView.contentSize.height / myTextView.font.lineHeight;
return numLines;
}
- (NSString *) formatResult: (NSString *) answerString answerNumber: (NSString *) answerNumber {
NSString * resultWithoutAnswer = [NSString stringWithFormat:@"%@ = ", answerString];
NSString * resultWithAnswer = [NSString stringWithFormat:@"%@ = %@", answerString, answerNumber];
NSString * result = resultWithAnswer;
if ([self numberOfLines:resultWithoutAnswer] != [self numberOfLines:resultWithAnswer]) {
// If these are different, then UITextView has added a line break before the answer. To prevent UITextView from potentially splitting the number across the negative sign, manually add a line break to ensure that the negative sign shows on the same line as the number.
result = [NSString stringWithFormat:@"%@ = \n%@", answerString, answerNumber];
}
return result;
}