swift - 找到适合特定宽度的 NSFont 大小
问题描述
我正在使用以下代码NSFont
使用循环查找适合宽度的大小。while
是否有内置函数可以使计算更容易?
let ratio = image.size.width/referenceimagesize!.width
let fcsize=fontsize.width*ratio
if(fontsize.width<fcsize)
{
while(fontsize.width==fcsize)
{
var newheight:CGFloat = 0;
font = NSFont(name: font!.fontName, size: font!.pointSize+1)
var fontAttributes = [NSAttributedStringKey.font: font]
fontsize = (text as NSString).size(withAttributes: fontAttributes)
}
}
解决方案
不,没有内置功能,但你为什么要使用while(fontsize.width==fcsize)
?不应该比较<
吗?尝试这样的事情:
func findFontSize(text: String, frameWidth: CGFloat, font: NSFont) -> CGFloat {
var textSize = text.size(withAttributes: [.font: font])
var newPointSize = font.pointSize
while textSize.width < frameWidth {
newPointSize += 1
let newFont = NSFont(name: font.fontName, size: newPointSize)!
textSize = text.size(withAttributes: [.font: newFont])
}
return newPointSize
}
推荐阅读
- google-bigquery - 无法将 Power BI 服务连接到 Google BigQuery - 登录循环
- python - 每次从 csv Elasticsearch 创建新索引时更新索引
- locust - 蝗虫响应时间开始时的高延迟
- windows - 我在 PyCharm 上用 git 下载了一个 repo,几乎每个文件上的许多缩进都关闭了
- javascript - 我有一个非常慢的功能,我正在考虑将数据拆分为 10 和进程的列表,但我不确定用什么来解决这个问题
- javascript - 为什么计数器在控制台中以不同的值出现两次?
- python - 从部分信息中获取完整地址数据
- sql - 来自新手的 Oracle SQL Developer 问题
- python - 如何从一个整数列表和一个布尔值列表创建一个列表?(Python)
- navigation - Blazor NavigationManager.NavigateTo 更改 URL 但不加载页面