ios - iOS 中的 UILabel 中 emoji 被剪裁

标签 ios objective-c chat emoji

您好,我正在开发聊天应用程序,用户可以在其中向其他用户发送笑脸(表情符号)。对于文本来说它工作完美,但是当它包含表情符号时那么它是正确的。我已经使用了这个方法

- (CGSize)getSizeForText:(NSString *)text maxWidth:(CGFloat)width font:(NSString *)fontName fontSize:(float)fontSize {
    CGSize constraintSize;
    constraintSize.height = MAXFLOAT;
    constraintSize.width = width;
    NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                          [UIFont fontWithName:fontName size:fontSize], NSFontAttributeName,
                                          nil];

    CGRect frame = [text boundingRectWithSize:constraintSize
                                      options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                   attributes:attributesDictionary
                                      context:nil];

    CGSize stringSize = frame.size;
    return stringSize;
}

结果类似于 image 1 image 2 image 3

从图像中你可以看到我想说的和我需要的。当 UILabel 中有表情符号文本时,我需要在两行之间添加一些内容。任何帮助将不胜感激。提前致谢。

编辑:我已经对此给出了答案。但如果有人对此有一些快速的技巧那么这对我来说会很棒。

最佳答案

我已经手动完成了一项很好的工作,现在看起来对我来说很好。我为标签文本添加了行距,这对我很有用。我已将文本设置为

NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@",message_text]];
            NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
            [style setLineSpacing:4];
            [attrString addAttribute:NSParagraphStyleAttributeName
                               value:style
                               range:NSMakeRange(0, [message_text length])];
            lblChatMSG.attributedText = attrString;

我获取文本高度的方法是

- (CGSize)getSizeForText:(NSString *)text maxWidth:(CGFloat)width font:(NSString *)fontName fontSize:(float)fontSize {
    CGSize constraintSize;
    constraintSize.height = MAXFLOAT;
    constraintSize.width = width;

    NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
    paragraphStyle.alignment = NSTextAlignmentLeft;
    paragraphStyle.lineSpacing = 4;

    NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                          [UIFont fontWithName:fontName size:fontSize], NSFontAttributeName,paragraphStyle,NSParagraphStyleAttributeName,
                                          nil];

    CGRect frame = [text boundingRectWithSize:constraintSize
                                      options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                   attributes:attributesDictionary
                                      context:nil];

    CGSize stringSize = frame.size;
    return stringSize;
} 

结果是image result for emoji with good space in lines

关于ios - iOS 中的 UILabel 中 emoji 被剪裁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33821006/

相关文章:

IOS浏览器一旦滚动就不会缩小页面内容

ios - 重用 UITableViewCell 移动 subview 框架

Thunderbird 中的 Gmail 聊天文件夹

java - 聊天应用程序的服务器端实现

javascript - 网站实时聊天软件

iOS TabbarViewController 隐藏标签栏

ios - 在理解部分块时遇到问题

ios - 为 "hyperlocal"应用程序获取用户位置(也处于已终止状态)的适当方法

ios - 等待线程 Objective C 中的值发生变化

ios - 新 Facebook iOS 应用的自定义 URL 方案