如何获取UITextView中最后一行的文本长度

时间:2016-05-08 01:28:45

标签: ios cocoa-touch uitextview

在我的应用程序中,我试图让UILable时间文本以类似于WhatsApp的方式对齐,如果UITextView消息文本的最后一句话太长,则时间将被推送到下一个线。所以我实际上是想根据UITextView的消息框调整UILabel的时间。

message box time layout image

This is a text message.  7:16PM


This is a longer
text message.    7:15PM


This is an even longer
text message till end.
                7.15PM

我能想到的一种方法是使用UITextView的类并抓住最后一行的长度并计算文本宽度,与UITextView的宽度相比,知道它是否超过但没有运气。有什么办法吗?

2 个答案:

答案 0 :(得分:0)

这是我写的代码解决了我的问题。感谢格雷格指出我正确的方向。

+ (BOOL)didTextMoveToNewline:(NSString *)text previousSize:(CGSize)previousSize {
    UIFont *messageBubbleFont = [UIFont systemFontOfSize:14.0f];
    float maximumTextWidth = 188;

    NSString *finalText = [[NSString alloc] init];
    finalText = [NSString stringWithFormat:@"%@ 10:00PM ", text];
    CGRect stringRect = [finalText boundingRectWithSize:CGSizeMake(maximumTextWidth, CGFLOAT_MAX)
                                           options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                        attributes:@{ NSFontAttributeName : messageBubbleFont }
                                           context:nil];

    CGSize stringSize = CGRectIntegral(stringRect).size;

    if (stringSize.height > previousSize.height)
        return YES;
    else
        return NO;
}

答案 1 :(得分:-1)

黑客就是在每条消息结束时自动添加一个空格。

trayicon.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
        try {
            frame.setExtendedState(JFrame.NORMAL);
            frame.setVisible(true);
        } catch (Exception ex) {
            Logger.getLogger(TrayControl.class.getName()).log(Level.SEVERE, null, ex);
        }
    } 
});

然后让时间总是与最后一行重叠。如果空格量正确,则文本和时间永远不会触及。