首页
学习
活动
专区
工具
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做。...制定目标和计划 在了解相关编程语言过程中,确定下来自己想要学习那一门语言,然后去了解相关课程和学习路线,设立一个大学习目标(想要达到水平),根据自己情况制定出一个适合学习计划。...制定阶段性目标并进行总结 设定能够实现但又有挑战性目标,试着做一些基本应用,阅读别人代码,遇到自己解决不了问题及时和行业有经验的人讨论交流,条件允许可以报个学习班,编程自学难度还是挺大

66610

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

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

1.4K50
  • 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提供了足够精确度。

    71810

    如何提升你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类型 响应布局中字体大小应该能够自动调整到视区,从而保存编写媒体查询工作,处理字体大小

    5K20

    rem与em详解

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

    4.7K30

    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英寸。

    1.8K30

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

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

    81520

    CSS基础-属性值单位:px, em, rem, %

    本篇博客将深入浅出地探讨四种常见属性值单位——像素(px)、相对单位em、rem以及百分比(%),分析它们特性、应用场景、常见问题以及如何避免这些误区,并提供实用代码示例。 1. ...像素(px) 概述 像素是最基本也是最直观长度单位,代表屏幕上一个物理像素点。在早期Web设计中,px是使用最为广泛单位,因为提供了稳定显示效果。...如果当前元素没有设置字体大小,则继承自父元素字体大小。em单位使得样式能够根据上下文动态调整,非常适合创建流体布局和响应式设计。...百分比(%) 概述 百分比单位基于其包含块(父元素)相应尺寸计算得出。广泛应用于创建流体布局,特别是在响应式设计中,可以随着窗口大小变化而自动调整元素尺寸。...px适合精确控制,em和rem则在响应式设计中大放异彩,而%则为创建流体布局提供了便利。理解每个单位特性和适用场景,能够帮助开发者避免布局问题,提高网页可访问性和用户体验。

    46710

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

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

    78010

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

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

    4.1K10

    写了一个 奇异字体生成器,欢迎大家来提建议!𝕗𝕣𝕖𝕒𝕜𝕪 𝕗𝕠𝕟𝕥 𝕘𝕖𝕟𝕖𝕣𝕒𝕥𝕠𝕣 - 𝓒𝓸𝓹𝔂 𝓪𝓷𝓭

    ⓇⒸⓁⒺⒹ ⒸⒶⓅⒾⓉⒶⓁ, , C҉y҉r҉i҉l҉l҉i҉c҉ ҉E҉n҉c҉l҉o҉s҉i҉n҉g҉ ҉C҉i҉r҉c҉l҉e҉ ,直达: freakyfontgenerator.top用上,...2)实时预览:用户在输入文本时,可以立即看到不同字体样式实时预览,方便快速选择。3)字体大小调整:允许用户通过滑动条调整字体大小,确保生成文本符合需求。...4)简单易用:界面友好,操作简单,用户只需输入文本,选择字体样式和大小,即可生成所需奇异字体。5)复制和分享:生成字体文本可以轻松复制,用户还可以将其分享至社交平台或用于其他应用。...使用场景社交媒体:为社交媒体帖子添加独特字体,使内容更加吸引眼球。网页设计:在网页中使用不同字体样式,提升视觉效果。个人项目:为个人作品或设计增添个性化字体风格。...总结奇异字体生成器是一款功能强大且易于使用工具,适合所有需要创造性字体用户。无论是用于个人还是商业目的,都能帮助用户轻松实现字体个性化定制。欢迎大家来提建议提升用户体验。

    11900

    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

    77230

    前端面试宝典(四)

    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 选择?

    72120

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

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

    4.2K30

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

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

    1.8K20

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

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

    46420

    最实用6个设计排版准则

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

    1.1K40
    领券