- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个类,该类显示一个带有一些文本的窗口、一个“不再显示”复选框和一个按钮。为了可重用,该类根据需要调整窗口大小以适合文本。
但是,计算中存在一些轻微的不精确 - 如果我不向宽度添加 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 - NSStringboundingRectWithSize 稍微低估了正确的宽度 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5512295/
我有一个可视化 C# 项目,我想从中编译两个可执行文件:Full.exe 和 Limited.exe。 Limited.exe 只是隐藏了几个 UI 控件。 我正在考虑添加另一对解决方案配置(Debu
我和我的伙伴正计划将我们拥有的 python 应用程序移植到 iOS。我们使用 numpy 的 SVD、范数和 pinv功能,我不知道如何转换为 iOS。我查看了 Accelerate文档,没有看到任
即,它永远不会使用某些特定的 upperBound 参数连续生成超过 16 个偶数: Random random = new Random(); int c = 0; int max = 17; in
我的问题是我必须使用第三方函数/算法,它采用 double 数组作为输入,但显然对输入数据中的非常小的变化很敏感.但是对于我的应用程序,我必须为(几乎)相同的输入获得相同的结果!特别是我有两个测试输入
mouse_event 函数将光标发送到稍有错误的坐标(偏离 1-20 像素)。它“关闭”的程度取决于我不太清楚的模式。 这是我的代码 int x, y; int repeats = 1000; in
在 C++ 类(class)中,我学到了避免重复计算、使用更多加法而不是更多乘法、避免幂等技巧来提高性能。然而,当我尝试让他们用 Julia-Lang 优化代码时,我对相反的结果感到惊讶。 例如,这里
好的。请耐心听我说,我不擅长解释事情。 我有一个通过网站上的表格收集的联系信息数据库。显然,人们不小心(或故意,但修复是一个不同的问题)多次按下“提交”,因此该数据库中有很多重复的行。 因此,tabl
我一直在用各种语言和实现实现相同的代码(在 Blackjack 中发牌而不爆牌的方法的数量)。我注意到的一个奇怪之处是,Python 在 C 中调用分区函数的实现实际上比用 C 编写的整个程序快一点。
我在使用 Pandas 解析数据的时间戳时遇到问题。 我尝试解析的日期时间格式示例类似于 2012-05-02 01:00:00-05:00。从 Pandas 文档中,我被驱动到相关的 Python
下面函数模板的目标是取任意unordered_map并产生一个新的unordered_map与 key_type和 mapped_type倒。下面的函数适用于 std::unorderd_map .我
我是一名优秀的程序员,十分优秀!