首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何告诉NSTextField自动调整它的字体大小以适合它的文本?

要让NSTextField自动调整字体大小以适合其文本,您可以使用以下方法:

  1. 使用NSFontManager:
代码语言:swift
复制
import Cocoa

class AutoFittingTextField: NSTextField {
    override func awakeFromNib() {
        super.awakeFromNib()
        self.isEditable = false
        self.isSelectable = false
        self.maximumNumberOfLines = 1
    }

    override func setStringValue(_ string: String) {
        super.setStringValue(string)
        adjustFontSize()
    }

    private func adjustFontSize() {
        let fontManager = NSFontManager.shared
        var fontSize = font?.pointSize ?? 12

        while fontManager.traitsOfFont(font!) != [] {
            fontSize -= 1
            font = fontManager.convert(font!, toSize: fontSize)
        }

        while fontManager.isMultiple(stringValue, forFont: font!) {
            fontSize += 1
            font = fontManager.convert(font!, toSize: fontSize)
        }
    }
}
  1. 使用NSLayoutManager:
代码语言:swift
复制
import Cocoa

class AutoFittingTextField: NSTextField {
    override func awakeFromNib() {
        super.awakeFromNib()
        self.isEditable = false
        self.isSelectable = false
        self.maximumNumberOfLines = 1
    }

    override func setStringValue(_ string: String) {
        super.setStringValue(string)
        adjustFontSize()
    }

    private func adjustFontSize() {
        let layoutManager = NSLayoutManager()
        let textStorage = NSTextStorage(string: stringValue, attributes: [.font: font!])
        textStorage.addLayoutManager(layoutManager)

        var fontSize = font?.pointSize ?? 12
        let containerSize = bounds.size

        while layoutManager.usedRect(for: textContainer!).size.width > containerSize.width || layoutManager.usedRect(for: textContainer!).size.height > containerSize.height {
            fontSize -= 1
            font = font?.withSize(fontSize)
            textStorage.removeLayoutManager(layoutManager)
            textStorage.addLayoutManager(layoutManager)
        }
    }
}

这些方法可以帮助您自动调整NSTextField的字体大小以适应其文本。您可以根据需要选择合适的方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何选择适合自己编程语言并高效学习

游戏开发、数据分析、大数据开发、机器学习等大方向,从而倒推了解相关编程语言。...了解相关编程语言 流行编程语言有哪些和流行程度如何,这个可以参考GitHub等比较权威机构发布近几年编程语言 TOP10报告,也可以参考网上一些相关文章,对比不同编程语言,如: Python...开发工具很多 6、PHP:做网站常用编程语言,一般与MySQL等数据库结合使用,大部分网站是用PHP做。...制定目标和计划 在了解相关编程语言过程中,确定下来自己想要学习那一门语言,然后去了解相关课程和学习路线,设立一个大学习目标(想要达到水平),根据自己情况制定出一个适合学习计划。...制定阶段性目标并进行总结 设定能够实现但又有挑战性目标,试着做一些基本应用,阅读别人代码,遇到自己解决不了问题及时和行业有经验的人讨论交流,条件允许可以报个学习班,编程自学难度还是挺大

63610

OS X 上使用.NET开发应用程序

,所有用到图片也是这篇博客,我只是按照这篇博客内容熟悉了一下开发环境,其中也碰到了一些问题,我会红色文字进行标识,相信也是你体验时候会碰到问题,不过这篇博客需要FQ才能阅读,你懂:...文件则是MonoDevelop根据xib文件中标记所自动创建C#代码,在绝大部分情况下我们不会去修改。...下面添加一个NSTextField,方法和NSButton类似,我们要做一件事就是按下按钮时候,修改TextField文本显示: 下一步是建立UI和控制器之间接口,首先是一个更新文本属性...再将label右侧小圆点拖动至NSTextField,当你释放鼠标你要看你NSTextField标签所联系在一起: 快完成了。...把和在画布上按钮按照标签相同方法建立关联。 最后一步是保存我们界面修改结果,这一步很重要哦,因为MonoDevelop是根据xib内容,自动生成了相关C#代码。

1.3K50

20个 CSS 快速提升技巧

solid #666; }.nav li:last-child { border-right: none; } 这是一种很混乱方式,它不仅强制浏览器一种方式渲染,然后又通过特定选择器来撤销...,我们只是告诉浏览器 让渲染行高是 渲染字体大小1.5倍 6、垂直居中任何元素 (vertical-center anything) 在没有准备使用CSSGrid 布局时候,设置垂直居中布局全局规则是一个很好方式...如果要在悬停时应用突出显示,或在滑块中设置子文本样式具有突出显示外观,则此功能尤其有用: .p { display: inline-block; box-decoration-break: clone...;使用em进行局部大小调整 在设置根目录基本字体大小后,例如html字体大小:15px;,可以将包含元素字体大小设置为rem: article { font-size: 1.25rem...; } 18、灵活运用root类型 响应布局中字体大小应该能够自动调整到视区,从而保存编写媒体查询工作,处理字体大小

3.2K20

【知识】Latex中emptmm等长度单位及使用场景

LaTeX中这些单位允许用户多种方式来指定和控制文档布局和外观。在具体使用时,选择哪种单位通常取决于用户需求和习惯。...例如,使用mm或cm可能更适合需要精确控制文档尺寸场景,而使用em或ex则更适合需要与当前字体大小相关布局调整。二、在使用时候应该如何选择?他们分别适用于那些场景?        ...em:适合用于定义与文字大小密切相关尺寸,如缩进、列表项目前空白等。在调整UI组件(如按钮和选择框)大小时非常有用,因为这样可以保持与周围文本视觉协调。...pc:适用于更传统排版场景,如书籍和杂志设计中大块文本设置。当需要在多个页面上保持严格布局一致性时使用。sp:主要用于非常精细排版调整,通常在自动化排版脚本或宏中使用。...当需要与文本字体大小密切相关联设计时,使用em或ex单位,因为它们会随字体大小而变化,使得布局更具可伸缩性。对于需要严格对齐文档,pt或bp提供了足够精确度。

16310

如何提升你CSS技能,掌握这20个css技巧即可

solid #666; } .nav li:last-child { border-right: none; } 这是一种很混乱方式,它不仅强制浏览器一种方式渲染,然后又通过特定选择器来撤销...,这里声明没有单位,我们只是告诉浏览器 让渲染行高是 渲染字体大小1.5倍 6、垂直居中任何元素 (vertical-center anything) 在没有准备使用CSSGrid 布局时候,...如果要在悬停时应用突出显示,或在滑块中设置子文本样式具有突出显示外观,则此功能尤其有用: .p { display: inline-block; box-decoration-break:...;使用em进行局部大小调整 在设置根目录基本字体大小后,例如html字体大小:15px;,可以将包含元素字体大小设置为rem: article { font-size: 1.25rem...none; } 18、灵活运用root类型 响应布局中字体大小应该能够自动调整到视区,从而保存编写媒体查询工作,处理字体大小

4.9K20

如何使Safari for Mac中网页更易于阅读

所有这些都涉及调整Safari加载网页内容时所应用字体大小或缩放级别,如果您使用是高分辨率小屏幕或大型显示设备,这将很有帮助。...如果要保持图像大小不变,并且仅即时调整网页字体大小,请按Option-Command和+或-键。...您也可以按住Option键并单击Safari菜单栏中“查看”,这会将“缩放”选项更改为“使文本变大”和“使文本变小”。 Safari会记住您缩放和字体大小设置,直到您清除历史记录。...设置特定网站缩放级别 为特定网站设置缩放级别后,Safari会在您每次访问自动应用它。这是完成过程。 导航到您要为其调整缩放级别的站点。...强制网站使用更大字体 最后,Safari中有一个选项,可让您强制网站最小字体显示文本,而不影响缩放级别。 在Safari浏览器菜单栏,选择Safari浏览器- >首选项...。

2.3K40

rem与em详解

Em 单位遗传效果 使用 em 单位存在继承时候,情况会变得比较棘手,因为每个元素将自动继承其父元素字体大小。...为此,使用 rem 单位主要目的应该是确保无论用户如何设置自己浏览器,我们布局都能调整到合适大小。 一个站点最初设计可以专注于最常见默认浏览器中字体大小 16px。...这是很普遍做法,所以改变html元素字体大小时,可以使整个页面做相应调整 我强烈反对种做法,因为重写继承了用户设置浏览器字体大小。 更夸张说,这剥削了用户自行调整获得最佳视觉效果能力。...请尝试更改下面的 CodePen,看看 html 元素上 em 字体大小如何起作用: 少部分情况下,我们不想我们字体大小根据根元素做调整,只有几个例外情况。...始终使用 rem 单位做媒体查询 特别注意,当使用 rem 单位创建统一可扩展设计,媒体查询也应该是rem单位。 这将确保,无论用户浏览器字体大小,您媒体查询会对作出反应和调整布局。

4K30

pt、rpx、px、em、rem、%、vh、vw区别

例如,如果父元素字体大小是16px,1em等于16px,如果在一个嵌套子元素中使用1em,它将等于16px * 子元素字体大小。...em常用于调整文本大小、行高和间距,特别是在需要嵌套元素情况下,可以实现相对尺寸。3. rem:rem也是相对单位,但是相对于文档根元素字体大小。...根元素通常是HTML文档标签,字体大小可以在CSS中设置。rem非常适合响应式设计,因为它不会受到嵌套元素影响。...百分比常用于调整尺寸、布局和位置,特别是在创建自适应和响应式设计时非常有用。5. vh(视口高度)和vw(视口宽度):vh和vw是相对于视口高度和宽度单位。...1vh等于视口高度1%,1vw等于视口宽度1%。这些单位非常适合响应式设计,因为它们让元素根据屏幕大小自动调整大小。6. pt(点):pt是用于印刷和排版单位,等于1/72英寸。

53630

一步一步,开始上手Mac 开发(二)

对于名字 (name) 我们使用NSTextField 控件,具有显示和编辑功能 对应图片(image)我们使用控件NSImageView 对应评分(rating)我们使用导入开源控件EDStarRating...控件,为此我们需要从控件库中拖拽一个叫做“Custom View”控件,后面再设置 ?...调整image view Scaling 再次运行,查看效果 ?...现在我们已经实现在table view 中添加或者删除数据来,那么接下来,我们来实现编辑现有的数据功能,同样,我们要为NSTextField添加事件监听方法(与iOSUITextField一样) ?...NSTextField 添加事件响应方法 再次运行程序,没有错误的话,我们可以在右侧详情视图text field中修改左侧table view 选中行名称了。

78120

字体是网页设计中最重要细节

同时,由于中文系统,默认字体为宋体,见太多导致审美疲劳,所以衬线字体比较适合打印文字以及正规文档中使用,通常不太适合使用在网页中。...字体选择 上面的这些理论,从某些角度和意义上来说,都是废话。如何选择合适字体,才真正切合实际。那么我们应该如何选择在网页中使用字体呢?...em:相对大小,表示字体大小不固定,根据基础字体大小进行相对大小处理。...相对大小单位有很广泛用途,由于相对性,所以对跨平台跨设备字体大小处理上有得天独厚优势,同时对于响应式布局设计也有很大帮助。...font-style:用于定义字体样式,包括正常、斜体、倾斜等,对应属性值为:normal - 文本正常显示、italic - 文本斜体显示、oblique - 文本倾斜显示。

66610

超越媒体查询:使用更新特性进行响应式设计

实上,当媒体查询与这些功能一起使用时,更像是一种补充,而不是一种完整方法。让我们看看它是如何工作。...帮助文本大小在不同屏幕大小上正确缩放方面,该功能非常有用,例如从不让流畅字体大小降低到清晰字体大小以下: html { font-size: min(1rem, 22px); /* Stays...在此示例中,我们告诉浏览器永远不要让.box类元素宽度减小到45%或600px以下(视口宽度为准,最小者为准): .box { width : min(45%, 600px) } 如果45%...使用响应单位 你是否曾经建立过一个带有大标题或副标题页面,并且在 PC 屏幕上显示效果良好,但在移动设备上却发现太大了? 我猜肯定会遇到这种情况,在本节中,我们将介绍如何处理此类问题。...rem使用根()元素字体大小计算值,而声明em值元素引用包含父元素字体大小

4.1K10

CSS常见样式(一)

块级元素会独占一行,默认情况下,其宽度自动填满其父元素宽度。...对于表格元素,可继承属性有:border-collapse。 所有元素都可继承得属性有:visibility和cursor。 3、如何让块级元素水平居中?如何让行内元素水平居中?...PX特点: IE无法调整那些使用px作为单位字体大小; 国外大部分网站能够调整原因在于其使用了em或rem作为字体单位; Firefox能够调整px和em,rem,但是96%以上中国网民使用IE...比如说你在#content中声明了字体大小为1.2em,那么在声明p字体大小时就只能是1em,而不是1.2em, 因为此em非彼em,因继承#content字体高而变为了1em=12px。...这个单位可谓集相对大小和绝对大小优点于一身,通过既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合连锁反应。目前,除了IE8及更早版本外,所有浏览器均已支持rem。

1.7K30

Refactoring UI

不要每次需要挑选新蓝色色调时都去拿取色器,而是从事先挑选好 8-10 种色调中进行选择 不要一个像素一个像素地调整字体大小,直到看起来完美为止,事先定义一个限制性字体比例,并以此来决定未来字体大小...更好方法是根据背景色手工挑选新颜色 选择相同色调颜色,然后调整饱和度和亮度, 直到你觉得合适为止 # 通过取消强调来强调 与其进一步强调你想引起注意元素, 不如想想如何去强调与之竞争元素...45 到 75 个字符之间 # 处理更广泛内容 如果将段落文本与图片或其他大型组件混合, 即使整体内容区域需要更宽容纳其他元素,也应限制段落宽度 # 基线,非中心 在很多情况下,使用多种字体大小在单行上创建层次是有意义...相比垂直居中,更好方法是根据基线(即字母所在假想线)来调整混合字体大小 # 行高成正比 # 计算行宽 在文本行与行之间添加空格原因是, 当文本换行时, 便于读者找到下一行。...不过,在一些常见情况下,调整间距可以改善设计 # 紧缩标题 如果您想在标题或标题中使用字母间距较宽族,通常可以减少字母间距,模仿专用标题族浓缩外观 .title { letter-spacing

35130

Adobe Photoshop CC 2019最新版软件已更新(可下载)

另外,您还可以将任意形状或文本转化为图框,并使用图像填充图框。要将图像置入图框,只需从“库”面板或本地磁盘中拖放 Adobe Stock 资源或库资源即可 — 图像会自动进行缩放,适应图框大小。...双击编辑文本现在,您可以使用“移动”工具双击“文字”图层,快速开始编辑文档中文本。无需切换工具即可编辑文本。经过改进变形工具对变形进行更加精准地控制,获得您想要外观。...可用性改进现在您可以隐藏参考点,双击画布编辑文本,并利用自动提交功能更快、更高效地裁切、转换、放置并输入文本。此外,Photoshop 默认会按比例转换像素和文字图层,这样画板就更不容易意外移动。...您可以在缩放 Photoshop UI 时获得更多控制权,并且可以独立于其他应用程序,对 Photoshop UI 单独进行调整获得恰到好处字体大小。...在“界面”首选项(编辑 > 首选项 > 界面)中,新增了一个缩放 UI 适合字体设置。

77410

前端面试宝典(四)

1) 要求容器在宽度自由伸缩情况下,A/B/C宽度始终是1:1:1,如何实现,写出两种方法。...PX特点 IE无法调整那些使用px作为单位字体大小; 国外大部分网站能够调整原因在于其使用了em或rem作为字体单位; Firefox能够调整px和em,rem,但是96%以上中国网民使用IE...相对于当前对象内文本字体尺寸。如当前对行内文本字体尺寸未被人为设置,则相对于浏览器默认字体尺寸。 EM特点 em值并不是固定; em会继承父级元素字体大小。...这个单位可谓集相对大小和绝对大小优点于一身,通过既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合连锁反应。目前,除了IE8及更早版本外,所有浏览器均已支持rem。...对于不支持浏览器,应对方法也很简单,就是多写一个绝对单位声明。这些浏览器会忽略用rem设定字体大小。 px 与 rem 选择?

69320

为什么你永远不应该在CSS中使用px来设置字体大小

作者指出,相对于容器、浏览器或用户字体大小,px值是静态。无论用户字体偏好设置如何,当我们静态像素设置值时,它将覆盖用户选择,以我们指定的确切值替代。...但现在指的是当前字体大小,而不是特定字形尺寸。 EM 和 REM 之间区别 为了区分这两者: 1rem 始终等于浏览器字体大小,或者更准确地说是 html 元素字体大小。...当设置静态像素值时,无论用户字体偏好大小如何都会覆盖该选择并使用指定的确切值。...(zh-Hans) 所以,这里总结是: 当用户更改字体大小时, px 值不会缩放。 em 和 rem 值会随字体大小成比例调整。...如果你想要一个交互式演示,将所有这些内容联系在一起,请查看最终 CodePen;调整顶部滑块查看修改文档字体大小对各种元素影响,基于它们使用 CSS 单位。

1.6K20

「Adobe国际认证」不要让“字距调整”,限制你风格

字距调整调整两个字符(字母、数字、标点符号等)之间间距,产生更具视觉吸引力结果。...度量字距调整是由图形设计程序完成自动字距调整,该程序内置在字距调整表中字体本身中。字距调整表为经常出现问题字距调整对分配标准值,例如“WA”或“Ta”。 字体中还内置了光学字距调整。...度量和光学字距调整适用于段落部分原因是字体大小通常太小而无法注意到字距调整错误。直到广告牌或店面上文字出现时,错误才明显。 有了这些知识,就知道什么时候该紧缩了。...通常不需要对大块文本执行此操作,但应特别注意标题、带有文本横幅图像和标题。...为了让这个词(和其他冗长词)感觉不那么令人生畏,试着把分成三个字符组获得更好字距调整体验。取单词前三个字母 kern,然后移动一个字符,直到到达单词末尾。

42120

面试题整理|45个CSS面试题

第二个参数上会告诉浏览器自动确定左右边距,方法是将它们均等设置。保证左右边距将设置为相同大小。第一个参数0表示顶部和底部边距都将设置0。 Q24. overflow属性在CSS中被用于什么?...所有子元素自动成为容器成员,称为Flex项目(flex item),简称”项目”。 Q33、浏览器如何确定哪些元素与CSS选择器匹配? 浏览器从最右边(key 选择器)到左边匹配选择器。...使网站具有响应能力意味着某些元素将通过CSS媒体查询根据设备屏幕尺寸(通常是视口宽度)来调整其大小或其他功能,从而做出响应。 例如,在较小设备上减小字体大小。...良好CSS架构应该有合理文件组织。整体文件适合单独开发人员或非常小项目。...1、创建用于打印样式表 2、避免不必要HTML表格 3、知道页面的哪些部分没有任何打印价值 4、使用分页符 5、调整页面大小进行打印–最大高度等 发布者:全栈程序员栈长,转载请注明出处:https

4K30

最实用6个设计排版准则

作为一个设计师最重要技能之一就是你要学习如何去选择排版。这是因为文本是设计师与用户沟通主要方式之一。排版能成就你设计,也能毁灭你设计。 一个美观又复杂排版。...这样做将有助于引导读者视线,首先是标题,然后到正文文本。你还可以使用不同字体大小,颜色和权重创建视觉对比度。...使用此方法作为起点,然后利用人眼调整大小。 创建一个排版风格引导 该过程最后一步是为你排版创建一个风格指导,帮助你设计排版标准化。 ?...Shared styles in Sketch 在像Sketch这样程序中,你可以创建共享文本样式,以便快速插入已经从引导中应用样式文本。...在此过程这一步中,你可以调整完成文本属性,如颜色,比重和大小。 颜色一词:在选择颜色时,请考虑你调色板。选择与你调色板协调一致颜色。 ?

1K40
领券