我有一个UITextView,其中我显示了计算的结果。不幸的是,如果一个数字前面有一个负号,并且这个数字靠近边缘,UITextView会像这样在负号处拆分它来包装这个数字:
当前行为:
答案=-
123456789
相反,我想让它显示:
答案=
-123456789
在当前行为中,存在用户看不到减号并曲解答案的风险。
为了解决这个问题,我可以在答案前面强制换行,但有时整个字符串可以放在一行中,在这种情况下,如果答案足够短,我更愿意将所有内容都放在一行中。有没有一种简单的方法可以防止UITextView在减号之间换行,或者我需要听天由命地强制换行?
有时答案的第一部分有几个单词,本身也可能需要换行,所以换句话说,如果我强制换行,它可能如下所示:
计算结果
是
-2
但在这种情况下,我宁愿将"-2“放在"is”一词的旁边,这样它就会如下所示:
计算结果
is -2
发布于 2012-06-17 04:40:23
感谢大家的回答!这给了我一些想法,并能够解决问题。我希望这对其他有类似问题的人有所帮助。首先,为了再次澄清问题陈述,结果如下:
NSString * result = [NSString stringWithFormat:@"%@ = %@", answerString, answerNumber];通过计算UITextView内容视图(How do I size a UITextView to its content?)中的行数,我能够用以下方法解决这个问题:
首先,比较有无答案的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;
}发布于 2012-06-16 23:51:14
使用两个标签怎么样?只有当它的宽度大于某个值时,你才能将数字为"one line down“的那个放入……
编辑:你肯定需要两个标签。确定每个元素上的文本后,将'sizeToFit‘应用到这两个元素上,并流畅地布局它们,就像超文本标记语言中的内联元素一样:如果两个元素并排排在一行中,则很好;否则,一个位于另一个的下方。
所需的换行逻辑未包含在UILabel中。您必须自己实现它。
(也许UITextView的行为稍有不同?)
发布于 2012-06-17 00:23:40
我猜您可以解析前面有负号的数字,然后在该数字前面插入一个换行符(\n)。UITextView会接受换行符;我已经用过它们了。
如果您希望在数字足够小的情况下将其保留在同一行上,则需要想出一种更优雅的方法,通过编程来确定数字是否有足够的字符保留在一行上,或者是否已移动到两行。
https://stackoverflow.com/questions/11064896
复制相似问题