当前位置: 首页 > 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

相关文章:

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

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

IPS和IDS有啥区别

在网络安全领域&#xff0c;入侵检测系统 (IDS) 和入侵防御系统 (IPS) 是两种关键的技术&#xff0c;旨在保护网络免受各种威胁。这两者尽管名字相似&#xff0c;但在功能、配置、以及应用场景等方面都有着显著的差异。 入侵检测系统 (IDS) IDS 是一种被动监控系统&#xff0c…...

c基础面试题

1.static和const的作用 static意为静态的&#xff0c;在C语言中可以修饰变量。如果是全局变量则只能在当前文件范围访问。 如果是函数内的局部变量则延长生命周期到整个程序。这意味着如果函数被多次调用&#xff0c;这个变量不会被重新初始化&#xff0c;而是保留上次调用结…...

选择最佳HR系统_6款产品评测与推荐

本文盘点了ZohoPeople、SAPSuccessFactors等六款主流HRMS&#xff0c;各系统各具特色&#xff0c;如ZohoPeople的全球化云管理、SAP的高定制化、Workday的实时数据分析等&#xff0c;适合不同规模企业需求&#xff0c;建议企业试用后决策。 一、Zoho People Zoho People 是一个…...

Latex技巧——参考文献中加入url和doi

有的期刊要求在参考文献里加入url或者doi, 例如下图中蓝色的字体。 在bib里编辑为下图中note行&#xff0c;也就是利用\href命令。\href后第一个{}内为网址&#xff0c;第二个{}为在参考文献中显示的蓝色文字。一般来说&#xff0c;两个{}内的文字相同。若遇到有些网址有下划线…...

安卓WPS Office v18.13.0高级版

软件介绍 WPS Office&#xff0c;金山WPS移动版&#xff0c;使用人数最多的移动办公软件套件。独有手机阅读模式&#xff0c;字体清晰翻页流畅&#xff1b;完美支持文字&#xff0c;表格&#xff0c;演示&#xff0c;PDF等51种文档格式&#xff1b;新版本具有海量精美模版及高…...

【C++力扣】917.仅仅反转字母|387.字符串中第一个唯一字符|415.字符串相加

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山冈&#xff01; &#x1f525; 所属专栏&#xff1a;C深入学习笔记 &#x1f4ab; 欢迎来到我的学习笔记&#xff01; 一、917.仅仅反转字母 1.1 题目描述…...

RxSwift系列(四)异常处理和调试操作

一、异常处理 1.catchErrorJustReturn 当遇到 error 事件的时候&#xff0c;就返回指定的值&#xff0c;然后结束。 enum MyError: Error {case Acase B }let disposeBag DisposeBag()let sequenceThatFails PublishSubject<String>()sequenceThatFails.catchErrorJ…...

Excel基础:电子表格Excel的使用技巧合集

一、内容 1.表格下拉框选择内容...

教育技术革新:SpringBoot在线教育系统开发

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理微服务在线教育系统的相关信息成为必然。开…...

【大数据入门 | Hive】Join语句

1. 等值join Hive支持通常的sql join语句&#xff0c;但是只支持等值连接&#xff0c;不支持非等值连接。但sql是支持非等值连接的。 1&#xff09;案例实操 &#xff08;1&#xff09;根据员工表和部门表中的部门编号相等&#xff0c;查询员工编号、员工名称和部门名称。 …...

爬虫案例——爬取情话网数据

需求&#xff1a; 1.爬取情话网站中表白里面的所有句子&#xff08;表白词_表白的话_表白句子情话大全_情话网&#xff09; 2.利用XPath来进行解析 3.使用面向对象形发请求——创建一个类 4.将爬取下来的数据保存在数据库中 写出对应解析语法 //div[class"box labelbo…...

端模一体,猎豹移动对大模型机器人发展路径清晰

今年世界机器人大会刚刚收官不久&#xff0c;接咖啡、拿苹果、摊煎饼……人形机器人在这届大会上备受关注&#xff0c;厂商们编排“整活”&#xff0c;展位几乎水泄不通。 自从AI大模型开始全面改变市场开始&#xff0c;关于机器人的方向性争论就不绝于耳&#xff0c;就在最近的…...

操作系统笔记

1、操作系统是什么 操作系统是管理硬件和软件的一种应用程序。操作系统是运行在计算机上最重要的一种软件&#xff0c;它管理计算机的资源和进程以及所有软硬件。为计算机提供一种中间层&#xff0c;使得应用软件和硬件进行分离&#xff0c;让我们无需关注硬件的实现&#xff…...

两个wordpress网站共用一个数据库的数据表

在WordPress中&#xff0c;如果你想要两个不同的网站调用同一个数据表&#xff0c;你可以通过以下几种方法实现&#xff1a; 方法一&#xff1a;使用共享数据库 1. 设置共享数据库&#xff1a; – 确保两个WordPress网站都可以访问同一个数据库。 – 在数据库服务器上创建一…...

工具方法 - 面试中回答问题的技巧

在面试中&#xff0c;回答问题的技巧尤为重要。它不仅展示了你的知识和能力&#xff0c;还体现了你处理压力和沟通的技巧。以下是一些在面试中常用的回答技巧&#xff0c;以及如何在这些场合有效地回应问题的示例&#xff1a; 1. 抓住问题的核心 面试官通常会提出直接的问题&a…...

频繁full gc问题排查及解决

为什么我们要对频繁full gc的情况进行处理---》频繁full gc会导致stw&#xff0c;影响用户体验。 &#xff08;1&#xff09;先进行问题的排查 如果频繁full gc 会报警&#xff0c;公司有自己的监控平台&#xff0c;可以查看full gc的情况 如果公司没有自己的监控平台&#…...

昇思学习打卡营第33天|基于MindSpore的恶性皮肤肿瘤识别

1. 实验介绍 本次实验的目标是基于MindSpore框架&#xff0c;训练一个ResNet50模型&#xff0c;用于恶性皮肤肿瘤的分类识别。本实验将使用包含四类皮肤肿瘤图片的数据集&#xff0c;针对ResNet50模型进行微调&#xff0c;训练出一个能够精准分类皮肤病的模型。主要过程包括数据…...

基于SpringBoot+Vue的网约车管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

Java、PHP、ASP、JSP、Kotlin、.NET、Go

Java 1995年&#xff0c;Java诞生了&#xff0c;微软的Java是J#&#xff0c;早期是J. 它在C的基础上增强了安全性&#xff0c;不允许多重继承&#xff0c;堆栈不允许类对象&#xff0c;数组和枚举都是类对象。 Java的诞生 早期的Sun公司想要在消费级嵌入式设备编写可移植的代码…...

Ostrakon-VL处理网络协议:从数据包捕获文件可视化网络流量

Ostrakon-VL处理网络协议&#xff1a;从数据包捕获文件可视化网络流量 1. 网络流量分析的痛点与机遇 网络工程师每天都要面对海量的网络数据包&#xff0c;传统的分析工具虽然功能强大&#xff0c;但存在几个明显痛点&#xff1a; 数据量大&#xff1a;一个中等规模企业的日…...

Intv_AI_MK11 Anaconda数据科学环境配置:一站式AI研发平台搭建

Intv_AI_MK11 Anaconda数据科学环境配置&#xff1a;一站式AI研发平台搭建 1. 为什么选择Anaconda搭建AI开发环境 如果你刚开始接触AI开发&#xff0c;可能会被各种环境配置问题困扰。不同框架的版本兼容性、CUDA驱动安装、Python包依赖冲突...这些问题足以让新手望而却步。A…...

【完整源码+数据集+部署教程】光纤缺陷检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

一、背景意义 随着光纤通信技术的迅猛发展&#xff0c;光纤作为信息传输的主要媒介&#xff0c;其质量的优劣直接影响到通信系统的性能和稳定性。光纤在生产、运输和安装过程中&#xff0c;可能会出现各种缺陷&#xff0c;如划痕、气泡、折弯等&#xff0c;这些缺陷不仅会导致信…...

实战指南:基于同一份OpenSpec,用快马平台同步生成前后端代码,确保联调无忧

最近在开发一个电商平台时&#xff0c;我们团队遇到了前后端联调效率低下的问题。由于接口文档和实际代码存在差异&#xff0c;经常出现前端调用参数和后端接收不一致的情况。后来我们发现&#xff0c;基于OpenSpec规范同步生成前后端代码可以完美解决这个问题&#xff0c;这里…...

OpenClaw自动化边界:千问3.5-27B不适合处理的五类任务

OpenClaw自动化边界&#xff1a;千问3.5-27B不适合处理的五类任务 1. 为什么需要明确自动化边界&#xff1f; 去年冬天&#xff0c;我花了整整三天时间调试一个OpenClaw自动化流程——让AI帮我整理电脑里积压的200GB设计素材。当看到脚本误删了未备份的客户源文件时&#xff…...

Windows平台OpenClaw部署:百川2-13B-4bits量化版调用详解

Windows平台OpenClaw部署&#xff1a;百川2-13B-4bits量化版调用详解 1. 为什么选择这个组合&#xff1f; 去年冬天&#xff0c;当我第一次尝试在Windows笔记本上部署本地AI助手时&#xff0c;遇到了显存不足的难题。我的GTX 3060显卡根本无法承载常规的13B模型&#xff0c;直…...

STM32移植LVGL图形库实战指南

1. LVGL图形库概述与STM32移植价值LittlevGL&#xff08;简称LVGL&#xff09;作为当前最受欢迎的嵌入式开源图形库之一&#xff0c;其设计哲学完美契合了资源受限的嵌入式环境。我在多个STM32项目中采用LVGL后发现&#xff0c;相比传统GUI方案&#xff0c;它具有三个显著优势&…...

重构求职效率:boss_batch_push批量投递工具的颠覆性价值

重构求职效率&#xff1a;boss_batch_push批量投递工具的颠覆性价值 【免费下载链接】boss_batch_push Boss直聘批量投简历&#xff0c;解放双手 项目地址: https://gitcode.com/gh_mirrors/bo/boss_batch_push boss_batch_push是一款专为Boss直聘平台设计的开源自动化投…...

AIGlasses_for_navigation多场景落地:日常通勤、医院导诊、地铁站导航三场景实测

AIGlasses_for_navigation多场景落地&#xff1a;日常通勤、医院导诊、地铁站导航三场景实测 1. 引言&#xff1a;当导航从手机屏幕“走”到眼前 想象一下这样的场景&#xff1a;你走在陌生的城市街道&#xff0c;要去一个从未去过的咖啡馆。你不需要低头看手机地图&#xff…...

零基础入门Python爬虫:借助快马AI生成你的第一个可运行爬虫脚本

今天想和大家分享一下我作为Python爬虫新手的学习经历。刚开始接触爬虫时&#xff0c;面对各种库和概念真的有点懵&#xff0c;直到发现了InsCode(快马)平台&#xff0c;它让我用自然语言描述需求就能生成可运行的代码&#xff0c;大大降低了入门门槛。 爬虫的基本原理 爬虫就像…...