但是,计算中有一些细微的不精确 – 如果我不向宽度添加5个像素,则某些字符串会被截断. (简单地删除了最后一个字.)
这就是我所拥有的:
// NSTextFIEld *textLabel;// Nsstring *text;NSDictionary *stringAttributes = [NSDictionary dictionaryWithObject: [textLabel Font] forKey: NSFontAttributename];NSRect textFrame = [text boundingRectWithSize:NSMakeSize(textLabel.frame.size.wIDth,(unsigned int)-1) options:(NsstringDrawingdisableScreenFontSubstitution | NsstringDrawingUseslineFragmentOrigin | NsstringDrawingUsesFontLeading) attributes:stringAttributes];textFrame.size.wIDth += 5;
我暂时将标签的背景颜色设置为黄色以使调试更容易,并且它显然扩展到几乎适合最后一个单词.该测试字符串上有4个像素的额外值.
请注意,没有添加这些像素,并非所有字符串都会失败
我关心的原因有两个:
1)我想知道为什么它有些错误,更重要的是
2)我正在计算通过在计算之后改变宽度,理论上包装可以改变并且不使用最后一行,在文本下面创建额外的空白空间.
在我尝试解决这个问题时,我尝试添加平值并乘以常数,但那些从未给出完美的结果.
最近,我一直在使用
wIDth *= (25/(wIDth+2)+1);
使用NsstringDrawingUsesDeviceMetrics.对于我常用的长度,这给了我不错的结果.我已经看到8到50个字符之间的字符串最多有1-2个像素差异,这对我的要求来说足够准确.在50个字符之后,boundingRectWithSize:options:attributes:更准确但不完美.我没有进行过足够广泛的测试来说明这一点.也就是说,这可以消除任何担心下面有另一条线,因为文本永远不会掉到另一条线上.在较高的范围内(未测试过300个字符),它会略微高估而不是低估.在它再次开始低估的情况下,将25增加到~30.
总结以上是内存溢出为你收集整理的cocoa – NSString boundingRectWithSize略微低估了正确的宽度 – 为什么?全部内容,希望文章能够帮你解决cocoa – NSString boundingRectWithSize略微低估了正确的宽度 – 为什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)