ibireme / YYText

Powerful text framework for iOS to display and edit rich text.
MIT License
8.86k stars 1.7k forks source link

着急!我使用YYTextView的时候 富文本里面包含系统表情,但是高度不准,怎么办怎么办 #266

Closed Jacky-LinPeng closed 8 years ago

Jacky-LinPeng commented 8 years ago

着急!我使用YYTextView的时候 富文本里面包含系统表情,但是高度不准,怎么办怎么办

ibireme commented 8 years ago

高度不准 具体是什么问题?贴一下相关代码吧。

Jacky-LinPeng commented 8 years ago
for (int i = 0; i<max; i++)
    {
        NSString *title = i<texts.count?texts[i]:@"";
        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        [paragraphStyle setLineSpacing:10];//调整行间距
        NSDictionary *attri = [NSDictionary dictionaryWithObjects:@[kCurrentLabelFont,color,paragraphStyle] forKeys:@[NSFontAttributeName,NSForegroundColorAttributeName,NSParagraphStyleAttributeName]];
        [contentText appendAttributedString:[[NSAttributedString alloc] initWithString:title attributes:attri]];
        if (i<images.count)
        {
            UIImage *image = images[i];
            UIImageView *imageView = [self setupContentImageView:image tag:i];
            NSMutableAttributedString *attachText = [NSMutableAttributedString yy_attachmentStringWithContent:imageView contentMode:UIViewContentModeScaleAspectFit attachmentSize:imageView.size alignToFont:font alignment:YYTextVerticalAlignmentCenter];
            [contentText appendAttributedString:attachText];
        }
    }

    [self adjustContentSizeWithContentText:contentText];

==================================================
-(void)adjustContentSizeWithContentText:(NSMutableAttributedString *)contentText
{
    KSTopicShareVCArticleModel *model = [[KSTopicShareVCArticleModel alloc] init];
    YYTextLayout *textLayout = [self converAttributeStingToLayout:contentText];
    model.textLayout = textLayout;
    model.height = textLayout.textBoundingSize.height;
    [self.articleList addObject:model];

}
Jacky-LinPeng commented 8 years ago

@property (nonatomic,strong) YYTextView *contentLabel; 赋值的时候 self.contentLabel.attributedText = model.textLayout.text; 只有系统表情的时候 这个textBoundingSize不准

Jacky-LinPeng commented 8 years ago

95eb44f2-bb99-4ee6-9b91-bf39e53927cc

ibireme commented 8 years ago

YYTextLayout 在创建时,会有很多参数,比如 insets、linePositionModifier 等,在创建成功后,textBoundingSize 是会完全对应内部的文本排版结果的,不会出现不准确的情况。如果显示逻辑和 textLayout 对不上,那说明在这过程中某些参数没有传递过去。

不太清楚 [self converAttributeStingToLayout:contentText] 这一句是怎么创建 YYTextLayout 的。如果已经有 layout 了,那可以直接设置到 label.textLayout 来显示。

Jacky-LinPeng commented 8 years ago

-(YYTextLayout )converAttributeStingToLayout:(NSMutableAttributedString )contentText { YYTextContainer container = [YYTextContainer containerWithSize:CGSizeMake(self.view.frame.size.width, MAXFLOAT)]; YYTextLayout textLayout = [YYTextLayout layoutWithContainer:container text:contentText]; return textLayout; }

Jacky-LinPeng commented 8 years ago

insets、linePositionModifier这些参数 我在demo里面都没有看到怎么使用 所以 我都不懂得设置 所以来问你

ibireme commented 8 years ago

那就把这一行 self.contentLabel.attributedText = model.textLayout.text; 改成 self.contentLabel.textLayout = model.textLayout;,另外,调整 label 高度的代码放在这一行前面,这样试试。

Jacky-LinPeng commented 8 years ago

因为 我这个self.contentLabel 是 YYTextView 他的textLayout 是只读的不让设置 help

Jacky-LinPeng commented 8 years ago

/* The current text layout in text view (readonly). It can be used to query the text layout information. / @property (nullable, nonatomic, strong, readonly) YYTextLayout *textLayout;

ibireme commented 8 years ago

呃。。那为嘛起名 contentLabel。。如果不需要文本编辑的话,推荐改成 YYLabel 好一些。

YYTextView 的内容高度是可变的,而且里面会有一些文本操作的额外逻辑,所以这里并没有提供封装好的文本计算接口。如果确实需要计算 YYTextView 的大小,你可以试试把 textView.textContainerInset 清空。

Jacky-LinPeng commented 8 years ago

之前是用YYlabel的 所以就叫了这个名字 但是 我使用YYlabel的时候 没用好 图片会缺失 我当时就改用YYTextView 禁言编辑 然后发现遇到这个问题 感谢你的耐心回复 哈 我还是用YYlabel