当前位置: 首页 > 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.mrgr.cn/news/39735.html

相关文章:

  • 内核级理解套接字和全连接队列
  • 物联网智能设备:未来生活的变革者
  • centos发送邮件教程:从配置到发送全攻略!
  • 头戴式耳机性价比排名怎样?头戴式耳机性价比之王推荐!
  • 新考纲下的PMP考试有多难?
  • 谁在「力挺」激光雷达
  • 理解 Vue 的 setup 应用程序钩子
  • CDN与高防服务:区别与应用场景
  • YOLO11 | 一年更三版 版版不一样 | 关键改进及网络结构图【全网首发】
  • 深入掌握 Protobuf 与 RPC 的高效结合:实现C++工程中的高效通信
  • 原生 React Native 和 Expo对比
  • 记录一次出现循环依赖问题
  • 【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL69
  • 电商数据洞察新纪元:深度解析API接口集成实战
  • 双十一实用的数码好物分享!学生党必看,性价比超高!
  • 【无人机设计与技术】四旋翼无人机的建模
  • AI异常检测方案实施-基于基准块的无监督学习
  • TIM“PWM”输出比较原理解析
  • 演讲干货整理:泛能网能碳产业智能平台基于 TDengine 的升级之路
  • 影刀---如何进行自动化操作