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

[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.kler.cn/news/333472.html

相关文章:

  • 【重学 MySQL】五十四、整型数据类型
  • PC端微信小程序如何调试?
  • 不只是前端,后端、产品和测试也需要了解的浏览器知识(一)
  • ADC模拟-数字转换器
  • Android 10.0 系统framework层控制传感器开启和禁用功能实现
  • 【Xcode Command Line Tools】安装指南
  • 国外电商系统开发-运维系统添加拓扑节点
  • AI学习指南深度学习篇-学习率衰减的基本原理
  • Vue.js组件开发指南
  • VikParuchuri/marker 学习简单总结
  • 2款.NET开源且免费的Git可视化管理工具
  • Django一分钟:在Django中怎么存储树形结构的数据,DRF校验递归嵌套模型的替代方案
  • Python 工具库每日推荐 【BeautifulSoup】
  • wordpress函数has_tag()函数与get_the_tags()有什么区别?
  • 使用PL/SQL Deverloper过程遇见的问题
  • RTSP协议讲解
  • 简单线性回归分析-基于R语言
  • 算法笔记(十)——队列+宽搜
  • 基于muduo库函数实现protobuf协议的通信
  • LabVIEW提高开发效率技巧----调度器设计模式