首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITextView防止在负号和数字之间换行

问UITextView防止在负号和数字之间换行
EN

Stack Overflow用户
提问于 2012-06-16 23:47:02
回答 4查看 650关注 0票数 0

我有一个UITextView,其中我显示了计算的结果。不幸的是,如果一个数字前面有一个负号,并且这个数字靠近边缘,UITextView会像这样在负号处拆分它来包装这个数字:

当前行为:

答案=-

123456789

相反,我想让它显示:

答案=

-123456789

在当前行为中,存在用户看不到减号并曲解答案的风险。

为了解决这个问题,我可以在答案前面强制换行,但有时整个字符串可以放在一行中,在这种情况下,如果答案足够短,我更愿意将所有内容都放在一行中。有没有一种简单的方法可以防止UITextView在减号之间换行,或者我需要听天由命地强制换行?

有时答案的第一部分有几个单词,本身也可能需要换行,所以换句话说,如果我强制换行,它可能如下所示:

计算结果

是

-2

但在这种情况下,我宁愿将"-2“放在"is”一词的旁边,这样它就会如下所示:

计算结果

is -2

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-17 04:40:23

感谢大家的回答!这给了我一些想法,并能够解决问题。我希望这对其他有类似问题的人有所帮助。首先,为了再次澄清问题陈述,结果如下:

代码语言:javascript
复制
NSString * result = [NSString stringWithFormat:@"%@ = %@", answerString, answerNumber];

通过计算UITextView内容视图(How do I size a UITextView to its content?)中的行数,我能够用以下方法解决这个问题:

首先,比较有无答案的UITextView中的行数。如果行数不同,则意味着UITextView已决定将结果换到新行上,在这种情况下,我应该重新格式化结果,以便在数字之前手动添加换行符,以确保负号(数字的一部分)是新行上的第一个字符:

代码语言:javascript
复制
- (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;
}
票数 0
EN

Stack Overflow用户

发布于 2012-06-16 23:51:14

使用两个标签怎么样?只有当它的宽度大于某个值时,你才能将数字为"one line down“的那个放入……

编辑:你肯定需要两个标签。确定每个元素上的文本后,将'sizeToFit‘应用到这两个元素上,并流畅地布局它们,就像超文本标记语言中的内联元素一样:如果两个元素并排排在一行中,则很好;否则,一个位于另一个的下方。

所需的换行逻辑未包含在UILabel中。您必须自己实现它。

(也许UITextView的行为稍有不同?)

票数 0
EN

Stack Overflow用户

发布于 2012-06-17 00:23:40

我猜您可以解析前面有负号的数字,然后在该数字前面插入一个换行符(\n)。UITextView会接受换行符;我已经用过它们了。

如果您希望在数字足够小的情况下将其保留在同一行上,则需要想出一种更优雅的方法,通过编程来确定数字是否有足够的字符保留在一行上,或者是否已移动到两行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11064896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档