iOS-Coretext 图文混排占位符上下偏移处理

yizhihongxing

这里说的占位符,实际就是排版时需要展示的图片,图片基于占位符填充,那么处理图片时,怎么解决占位符(图片)的上下偏移
在设置占位符属性时,我通过以下方法来实现它:

+ (NSAttributedString *)wxImageAttributeCoreTextFromPaperQuestion:(WXTKCoretextQSourceImg *)image{
    
    CTRunDelegateCallbacks callbacks;
    memset(&callbacks, 0, sizeof(CTRunDelegateCallbacks));
    callbacks.version = kCTRunDelegateVersion1;
    callbacks.getAscent = ascentCallbackPaper;
    callbacks.getDescent = descentCallbackPaper;
    callbacks.getWidth = widthCallbackPaper;
    CTRunDelegateRef delegate = CTRunDelegateCreate(&callbacks, (__bridge void *)(image));
    // 使用0xFFFC作为空白的占位符
    unichar objectReplacementChar = 0xFFFC;
    NSString * content = [NSString stringWithCharacters:&objectReplacementChar length:1];
    NSMutableDictionary * attributes = [self wxAttributesPaperImg:image];
    NSMutableAttributedString * space = [[NSMutableAttributedString alloc] initWithString:content attributes:attributes];
    CFAttributedStringSetAttribute((CFMutableAttributedStringRef)space, CFRangeMake(0, 1),
                                   kCTRunDelegateAttributeName, delegate);
    CFRelease(delegate);
    return space;
}

上述方法在引入 CTRunDelegateCallbacks 时,提供了控制占位符大小属性,即:getAscent、getDescent、getWidth

getWidth是占位符所取宽,getAscent与getDescent分别基于基准可上下偏移,一般情况,getDescent会提供返回0值,而getAscent一般是占位符(图片)的高度;下面通过设置不同数值,看下字符如何偏移;

向下不偏移,向上提供占位符高度

///占位基准上升度
static CGFloat ascentCallbackPaper(void *ref){
    WXTKCoretextQSourceImg *refP = (__bridge WXTKCoretextQSourceImg *)ref;
    return refP.height;
}
///占位基准下降度
static CGFloat descentCallbackPaper(void *ref){
    return 0;
}

视觉给我感觉默认不向下偏移,图片比左侧字符高一点点

iOS-Coretext 图文混排占位符上下偏移处理

向下偏移5,向上提供占位符高度 - 5

///占位基准上升度
static CGFloat ascentCallbackPaper(void *ref){
    WXTKCoretextQSourceImg *refP = (__bridge WXTKCoretextQSourceImg *)ref;
    return refP.height - 5;
}
///占位基准下降度
static CGFloat descentCallbackPaper(void *ref){
    return 5;
}

iOS-Coretext 图文混排占位符上下偏移处理

向下偏移10,向上提供占位符高度 - 10

///占位基准上升度
static CGFloat ascentCallbackPaper(void *ref){
    WXTKCoretextQSourceImg *refP = (__bridge WXTKCoretextQSourceImg *)ref;
    return refP.height - 10;
}
///占位基准下降度
static CGFloat descentCallbackPaper(void *ref){
    return 10;
}

iOS-Coretext 图文混排占位符上下偏移处理

向下偏移整个占位(图片)高度,向上提供占位符高度 0

///占位基准上升度
static CGFloat ascentCallbackPaper(void *ref){
    WXTKCoretextQSourceImg *refP = (__bridge WXTKCoretextQSourceImg *)ref;
    return refP.height - refP.height;
}
///占位基准下降度
static CGFloat descentCallbackPaper(void *ref){
    WXTKCoretextQSourceImg *refP = (__bridge WXTKCoretextQSourceImg *)ref;
    return refP.height;
}

iOS-Coretext 图文混排占位符上下偏移处理

注意有个问题,上述的 getAscent、getDescent值加起来,其实就是图片的高度,那么如果比高度大或者小的情况下,图片会被拉伸,或者压缩

向下偏移小于整个占位(图片)高度( -10),向上提供占位符高度 0

///占位基准上升度
static CGFloat ascentCallbackPaper(void *ref){
    WXTKCoretextQSourceImg *refP = (__bridge WXTKCoretextQSourceImg *)ref;
    return refP.height - refP.height;
}
///占位基准下降度
static CGFloat descentCallbackPaper(void *ref){
    WXTKCoretextQSourceImg *refP = (__bridge WXTKCoretextQSourceImg *)ref;
    return refP.height - 10;
}

iOS-Coretext 图文混排占位符上下偏移处理

总结

上下偏移要处理好图片的高度值,确保getAscent + getDescent = 占位符(图片)高度即可

原文链接:https://www.cnblogs.com/wangkejia/p/16892664.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:iOS-Coretext 图文混排占位符上下偏移处理 - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • [Android开发学iOS系列] TableView展现一个list

    TableView 基础 本文讲讲TableView的基本使用.顺便介绍一下delegation. TableView用来做什么 TableView用来展示一个很长的list.和Android中的RecyclerView不同, iOS中的TableView只能是竖直方向的list. 如何写一个最简单的TableView 一个最简单的TableViewCont…

    IOS 2023年4月17日
    00
  • IOS证书制作教程

    Appuploader可以辅助在Windows、linux或mac系统直接申请iOS证书p12,及上传ipa到App Store,最方便在Windows开发上架没有苹果Mac电脑的开发者!配合本教程使用,可以快速掌握如何真机测试及上架! 点击苹果证书 按钮     点击新增 ​ 输入证书密码,名称 这个密码不是账号密码,而是一个保护证书的密码,是p12文件的…

    IOS 2023年4月18日
    00
  • csm移动端h5用什么样的视觉方案?

    项目需要求在移动端H5需要展示一些数据统计的图表,虽然第一时间想到的是echarts,常用还有Highcharts,D3等,antv家族的图表UI好看一些,再加上F2是移动端可视化方案于是就选择F2,打开官网果然眼前一亮F2提供的正能满足需求,F2官网地址:https://antv.alipay.com/zh-cn/f2/3.x/demo/index.htm…

    IOS 2023年4月18日
    00
  • ios apns推送 离线锁屏语音播报

    一、背景 公司正在研发的一款App,需要在进行消息推送时支持语音播报。 具体要求: 离线:App在用户未打开时,可收到消息推送 锁屏:用户在设备锁屏状态下,仍可收到消息推送 语音播报:收到消息推送时可同时进行语音播放 苹果的APNs消息推送, 支持在应用未打开及设备锁屏状态下收到推送。 而同时进行语音播报,则需要做一些特殊处理。 目前语音播报的场景有两种: …

    IOS 2023年4月25日
    00
  • 本文相关主要记录一下使用Hbuilder打包成苹果IOS-App的详细步骤。

    ​介绍一下个人开发者账号: 再说下什么是免费的苹果开发者账号,就是你没交688年费的就是免费账号,如果你想变成付费开发者账号,提交申请付费就行,账号都是一样的账号。 没有账号的点击链接申请: 苹果开发者账号申请 登录开发者中心developer.apple.com/account这个界面就是免费开发者账号 ​ 苹果免费开发者账号的功能限制 1、证书描述文件有…

    IOS 2023年4月18日
    00
  • iOS 审核浅谈:1.4.1、2.1、2.5.2、2.5.4、4.2.3、5.2.5

    整理下近期被 Apple 残忍虐待的成果。   ps: 可以提供一个视频链接,建议用微软的OneDrive 。审核员方便点。国内那些个地址都需要登录,需要登录才能看视频的场景,同样会被拒      Guideline 1.1 – Safety – Objectionable Content Guideline 1.1 – Safety – Objection…

    IOS 2023年4月18日
    00
  • HBuilder包装iOS APP上App Store的详细过程

    以前看过很多教程,然后。ITUNE管理APP功能被删除,IPA安装失败。Appuploader已有1个月的期限等问题。 请参见此教程重新安装。因此,放出。 很多新生开发,不知道如何包装。ios APP安装在自己的手机测试,ios不像安卓包装好后可以直接安装到手机上,苹果APP如果需要安装在非逃避的苹果手机。需要自己申请i特定OS证书包装才能安装。   在开发…

    IOS 2023年4月18日
    00
  • 中心化决议管理——云端分析

    作者:钱佳卫,研发工程师,产品研发和工程架构部-Client Infrastructure-App Infra-DevOps-Developer Tools 前言 CocoaPods 云端分析能力是字节跳动的终端技术团队(Client Infrastructure) 下 Developer Tools 部门提供的一系列云化基础设施之一, Developer …

    IOS 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部