根据Apple文档计算文字高度

如何解决根据Apple文档计算文字高度

我跟随this尝试确定在将文本放入CATextLayer之前需要的容器的高度。但是,我没有得到预期的结果。返回的NSRect为(0.0,0.0,0.0,0.0)。我在做什么错了?

func heightForStringDrawing(myString: Nsstring,myFont: NSFont,myWidth: CGFloat) -> NSRect {
    
    let textStorage:NSTextStorage = NSTextStorage.init(string: myString as String)
    let textContainer:NSTextContainer = NSTextContainer.init(containerSize: NSMakeSize(myWidth,CGFloat.infinity))
    let layoutManager:NSLayoutManager = NSLayoutManager()
    layoutManager.addTextContainer(textContainer)
    layoutManager.glyphRange(for: textContainer)
    textStorage.addLayoutManager(layoutManager)
    textStorage.addAttributes([NSAttributedString.Key.font : myFont],range: NSMakeRange(0,textStorage.length))
    textContainer.lineFragmentPadding = 0.0

    return layoutManager.usedRect(for: textContainer)
}

我这样称呼它:

print(myLayers.heightForStringDrawing(myString: "Some really,really,very long text.",myFont: NSFont.systemFont(ofSize: 14),myWidth: 66))

这将导致返回的NSRect为(0.0,0.0,0.0,0.0),但我希望是(0.0,0.0,66.0,(大于0.0或14.0的数字))。甚至没有返回宽度。

如果我发送一个空的myString = "",我得到的返回NSRect为(0.0,0.0,0.0,14.0)。但是仍然没有通话中提供的宽度。

解决方法

因此,您似乎没有正确地将他们给您的代码正确转换为Swift。按照他们给您的顺序翻译他们给您的 code ,就像这样:

func heightForStringDrawing(myString:String,myFont:NSFont,myWidth: GFloat) -> NSRect {
    let textStorage = NSTextStorage(string: myString)
    let textContainer = NSTextContainer(containerSize: NSMakeSize(myWidth,.greatestFiniteMagnitude))
    let layoutManager = NSLayoutManager()
    layoutManager.addTextContainer(textContainer)
    textStorage.addLayoutManager(layoutManager)
    textStorage.addAttributes([.font : myFont],range: NSMakeRange(0,textStorage.length))
    textContainer.lineFragmentPadding = 0.0
    layoutManager.glyphRange(for: textContainer) // <- here
    return layoutManager.usedRect(for: textContainer)
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?