当前位置: 首页 > news >正文

[Cocoa]_[初级]_[绘制文本如何设置断行效果]

场景

  1. 在开发Cocoa程序时,表格NSTableView是经常使用的控件。其基于View Base的视图单元格模式就是使用NSCell或其子类来控制每个单元格的呈现。当一个单元格里的文字过多时,需要截断超出宽度的文字,怎么实现?

说明

  1. Cocoa下的文本绘制和Win32不同,Cocoa下的字符串NSString是类,具有绘制drawInRect方法;Win32则需要调用GDI来绘制文本,文本本身只是一个宽子节字符串wchar_t, 并不是一个封装的类。

  2. NSString类的绘制方法其实是内部调用了活动图形上下文来绘制,只是对调用者隐藏了操作。并且如果要调用这些方法,必须是聚焦在视图的绘制函数或者一个活动的图形上下文里才可以。以下是drawInRect描述里的部分原文:

There must be either a focused view or an active graphics context when you call this method.
@interface NSString(NSStringDrawing)
- (NSSize)sizeWithAttributes:(nullable NSDictionary<NSAttributedStringKey, id> *)attrs NS_AVAILABLE(10_0, 7_0);
- (void)drawAtPoint:(NSPoint)point withAttributes:(nullable NSDictionary<NSAttributedStringKey, id> *)attrs NS_AVAILABLE(10_0, 7_0);
- (void)drawInRect:(NSRect)rect withAttributes:(nullable NSDictionary<NSAttributedStringKey, id> *)attrs NS_AVAILABLE(10_0, 7_0);
@end@interface NSAttributedString(NSStringDrawing)
- (NSSize)size NS_AVAILABLE(10_0, 6_0);
- (void)drawAtPoint:(NSPoint)point NS_AVAILABLE(10_0, 6_0);
- (void)drawInRect:(NSRect)rect NS_AVAILABLE(10_0, 6_0);
@end
  1. 如果需要增加额外的绘制属性,需要使用带withAttributes参数的方法,类似文本段行是需要用到文本属性里添加一种keyNSParagraphStyleAttributeName,valueNSMutableParagraphStyle实例的值。NSMutableParagraphStyle[1]类可以控制比如对齐方式,断字方式等。这里用到就是断行属性lineBreakMode,根据字母断行。
NSMutableParagraphStyle *paragraphStyle = [[[NSMutableParagraphStyle alloc] init] autorelease];
paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping; // 根据字母进行换行
paragraphStyle.alignment = NSTextAlignmentLeft;NSMutableDictionary* attri = [[NSMutableDictionary alloc] init];
[attri setValue:paragraphStyle forKey:NSParagraphStyleAttributeName];[self.description drawInRect:rect withAttributes:attri];

图1

在这里插入图片描述

参考

  1. NSMutableParagraphStyle
http://www.lryc.cn/news/454173.html

相关文章:

  • IPS和IDS有啥区别
  • c基础面试题
  • 选择最佳HR系统_6款产品评测与推荐
  • Latex技巧——参考文献中加入url和doi
  • 安卓WPS Office v18.13.0高级版
  • 【C++力扣】917.仅仅反转字母|387.字符串中第一个唯一字符|415.字符串相加
  • RxSwift系列(四)异常处理和调试操作
  • Excel基础:电子表格Excel的使用技巧合集
  • 教育技术革新:SpringBoot在线教育系统开发
  • 【大数据入门 | Hive】Join语句
  • 爬虫案例——爬取情话网数据
  • 端模一体,猎豹移动对大模型机器人发展路径清晰
  • 操作系统笔记
  • 两个wordpress网站共用一个数据库的数据表
  • 工具方法 - 面试中回答问题的技巧
  • 频繁full gc问题排查及解决
  • 昇思学习打卡营第33天|基于MindSpore的恶性皮肤肿瘤识别
  • 基于SpringBoot+Vue的网约车管理系统
  • Java、PHP、ASP、JSP、Kotlin、.NET、Go
  • 华为-单臂路由
  • AI应用的东风,奥特曼不想错过
  • LeetCode[中等] 238. 除自身以外数组的乘积
  • Linux plt表调用汇编代码分析
  • ubunut声卡配置 播放视频没有声音的解决方法 蓝牙问题
  • 《软件工程概论》作业一:新冠疫情下软件产品设计
  • 大厂出来的人为什么不比你高效?
  • 71.【C语言】动态内存管理(重点)(4)
  • JavaScript 用HTML5约束验证API做表单验证
  • Unity 编辑器多开
  • 【Spring Boot React】Spring Boot和React教程 完整版