You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将UITextView内容转换为固定宽、高度自适应的自定义尺寸图片?

解决UITextView转固定宽度750自适应高度图片的问题

我来帮你搞定这个需求!要生成固定宽度750、高度随内容自适应的图片,我们需要调整两个核心环节:计算TextView在指定宽度下的准确高度,以及创建对应尺寸的高清绘图上下文。

问题根源分析

你之前的代码里,sizeThatFits依赖屏幕宽度(375)计算高度,且绘图上下文尺寸跟着TextView当前frame宽度走,导致内容少的时候图片宽度也会缩小。现在我们要强制固定宽度为750,重新计算高度并绘制。

修改后的完整代码

- (UIImage *)imageFromTextViewWithFixedWidth:(CGFloat)fixedWidth textView:(UITextView *)view {
    // 保存TextView原始frame,后续还原避免影响界面布局
    CGRect originalFrame = view.frame;
    
    // 计算固定宽度下的自适应高度:用750宽度、无限高度来获取刚好容纳内容的尺寸
    CGSize targetSize = CGSizeMake(fixedWidth, CGFLOAT_MAX);
    CGSize contentSize = [view sizeThatFits:targetSize];
    
    // 创建高清绘图上下文:适配Retina屏幕,避免图片模糊
    UIGraphicsBeginImageContextWithOptions(contentSize, NO, [UIScreen mainScreen].scale);
    
    // 临时调整TextView到目标尺寸,确保内容完整绘制
    view.frame = CGRectMake(0, 0, contentSize.width, contentSize.height);
    
    // 将TextView内容渲染到上下文
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    
    // 获取生成的图片
    UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
    
    // 结束上下文并还原TextView原始状态
    UIGraphicsEndImageContext();
    view.frame = originalFrame;
    
    return resultImage;
}

关键细节说明

  1. 固定宽度计算高度:用CGSizeMake(750, CGFLOAT_MAX)作为sizeThatFits的参数,让TextView在750宽度下算出刚好容纳所有内容的最小高度。
  2. 高清上下文设置:使用UIGraphicsBeginImageContextWithOptions并传入屏幕scale,保证生成的图片在Retina屏幕下清晰不模糊。
  3. 还原原始布局:提前保存TextView的原始frame,绘制完成后恢复,避免打乱原有界面布局。

使用方式

调用时直接传入固定宽度750和你的TextView即可:

UIImage *fixedWidthImage = [self imageFromTextViewWithFixedWidth:750 textView:self.tvContent];

这样生成的图片就会严格保持750的宽度,高度则根据内容自动适配,不管内容多少都能满足你的需求啦!

内容的提问来源于stack exchange,提问作者user2688045

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:03:26