UILabel获取每一个字符的实际位置

/*

     最近的一个需求在一大段自动换行的UILabel最后一行隔一段位置添加一个编辑按钮,但是代码上并不允许使用Autolayout,最开始想了2种可行方式

     1.获取最后一个字符的位置 然后把按钮放在这后边。

     2.获取最后一行文字内容然后计算宽度 然后把按钮放在这后边。

     后来测试中发现当里边数据有表情符号的时候这两种方式的计算都是有误差的,所有并不能实现最开始想要的结果,后来又想了两种方式,一种是NSTextAttachment插入图片。这个以后再说。另一种就是

     @property (strong, nonatomic) NSTextStorage *textStorage;

     @property (strong, nonatomic) NSLayoutManager *layoutManager;

     @property (strong, nonatomic) NSTextContainer *textContainer;

     用这些来获取每一个字符的实际位置

     */

@interface ViewController ()

{

    UIView *flagView;//遮罩框

    NSInteger tag;//记录点击tag

}

@property (weak, nonatomic) IBOutlet UILabel *label;

@property (strong, nonatomic) NSTextStorage *textStorage;

@property (strong, nonatomic) NSLayoutManager *layoutManager;

@property (strong, nonatomic) NSTextContainer *textContainer;


@end


- (IBAction)buttonAction:(id)sender {

iOS 开发中,修改 `UILabel` 的体可以通过多种方式实现。`UILabel` 提供了 `font` 属性用于设置体样式,开发者可以使用系统体或自定义体来满足设计需求。 ### 设置系统标准体 可以使用 `systemFontOfSize:` 方法设置标准系统体,该方法适用于大多数界面显示需求。例如: ```objc label.font = [UIFont systemFontOfSize:17.0]; ``` 此外,iOS 还提供了加粗和斜体体设置方式,分别使用 `boldSystemFontOfSize:` 和 `italicSystemFontOfSize:` 方法: ```objc label.font = [UIFont boldSystemFontOfSize:17.0]; // 加粗体 label.font = [UIFont italicSystemFontOfSize:17.0]; // 斜体体 ``` 对于更精细的体控制,如设置体粗细等级,可以使用 `systemFontOfSize:weight:` 方法,该方法允许指定体的粗细样式,例如 `UIFontWeightThin`、`UIFontWeightLight` 或 `UIFontWeightRegular` 等: ```objc label.font = [UIFont systemFontOfSize:17.0 weight:UIFontWeightThin]; ``` 上述方法均适用于标准界面体设置,能够确保与系统 UI 风格保持一致[^1]。 ### 使用特定文本样式iOS 提供了基于特定文本样式的体设置方式,例如标题、正文、列表等。通过 `preferredFontForTextStyle:` 方法,可以根据文本样式获取适配当前设备体大小的体: ```objc label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline]; ``` 这种方式有助于实现动态体调整,支持系统体大小设置,从而提升可访问性。 ### 设置自定义体 若需使用自定义体,首先需确保体文件已正确添加至项目,并在 `Info.plist` 中注册体。随后可通过体名称和大小创建体对象: ```objc label.font = [UIFont fontWithName:@"CustomFontName" size:17.0]; ``` 自定义体可用于品牌一致性设计,但需注意体授权及加载性能问题。 ### 体大小调整与适配 在实际开发中,可能需要根据内容动态调整体大小以适应不同设备或用户偏好。可以通过监听 `UIContentSizeCategoryDidChangeNotification` 通知实现体大小动态更新: ```objc [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateFont) name:UIContentSizeCategoryDidChangeNotification object:nil]; ``` 在 `updateFont` 方法中重新设置体大小即可实现动态适配。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄权浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值