问题标签 [sizewithfont]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
13794 浏览

ios - 获取 NSString 高度

我有一个 NSString,我想知道它的高度以创建一个合适的 UILabel。

这样做

高度现在是 13.0。如果我使用这个字符串

高度始终为 13.0(宽度为 353,这是不可能的)......我做错了什么?

添加:

工作正常......所以就像 lineBreakMode 不正确......但它是,不是吗?

0 投票
1 回答
903 浏览

iphone - 如何将文本拆分为单独的 UITextView 页面?

一个子问题是:

如何确定 UITextview 的内置内部边距是多少?

我有一个很长的主文本字符串,我试图将其拆分为单独的 UITextView 页面,然后我可以在 UIScrollView 内从一个页面滚动到另一个页面。我使用以下方法来确定 UITextView 中字符串的高度是多少以及字符串是否超过高度限制:

我使用以下 cellFont 作为 mySize 的输入来调用 getHeightByWidth 方法:

UITextView 是 320 像素宽,但我注意到文本不会从左边缘到右边缘,因为内部边距看起来每边大约 10 像素。因此,当我调用 getHeightByWidth 时,我设置了 myWidth = (320 - 10 - 10); 但是在构建适合 UITextView 的字符串之后,最后一行通常会有空白,可以用主字符串中的下一个单词填充。

谁能告诉我为什么使用 UITextView 的这个过程会在文本的最后一行出现这些空白?

0 投票
3 回答
1611 浏览

objective-c - -[NSString sizeWithFont:] 在发布和调试版本中返回不同的结果

我已经使用此代码成功调整了 aUILabel的框架高度以适应动态文本多次:

一切都很好,直到我开始使用 iOS5 SDK 构建我的应用程序。

对于 armv6 设备(iPhone3G/-),在构建用于调试时,标签大小可以,但在构建用于发布时,检索到的高度值与宽度相同。我在实际设备上运行这两个版本。

带有以下日志行的示例:

输出:iphone3G - 调试 >

11 月 3 日星期四 18:22:50 未知应用名称 [1071]:labelSize:115.000000 19.000000

iphone3G - 发布 >

11 月 3 日星期四 18:22:50 未知应用名称 [1071]:labelSize:115.000000 115.000000

任何人都可以帮助或为我提供另一种解决方案来UILabel根据文本长度调整高度吗?

我知道关于这种方法有一些类似的问题,但它们没有解决这个特定问题。

0 投票
2 回答
16802 浏览

iphone - 将 CGSize 转换为 CGFloat 并使用它来调整 RoundRectButton 的大小

我正在尝试查找一串文本的物理像素大小。然后我想用这个大小来设置一个圆形矩形按钮的长度。我用来获取长度的方法返回一个 CGSize。如何将其转换为 CGFloat?或者,也许有人可以提出一种完全不同的方法来实现这一点。

这是我目前的代码:

正如你在上面看到的,我使用了 CGRectMake 方法,它接受 4 个参数作为 CGFloat。但是,我传入了一个导致运行时错误的 CGSize。

0 投票
2 回答
1022 浏览

objective-c - sizeWithFont 返回宽度 0

我的最终目标是改变字体大小,以便不同的单词适合同一个矩形区域。我认为 sizeWithFont 会是一个很好的使用方法,但我一直得到 0 的宽度,我很困惑。

我的计划是遍历字体大小,直到宽度适合但 sWidth.width 一直返回 0。

克里斯

0 投票
2 回答
1962 浏览

ios - iOS:sizeWithFont:用于自定义字体

我一直在插话,我需要使用 sizeWithFont: 方法来正确排列我的布局,但它似乎不适用于自定义字体。有没有办法让它工作,或者我可以使用另一种方法?

我对此感到很困惑。任何帮助表示赞赏。

0 投票
2 回答
11161 浏览

iphone - UILineBreakMode 与 NSLineBreakMode

我看到一些 UIStringDrawing 方法已更新为使用 NSLineBreakMode 而不是 iOS 6.0 中的 UILineBreakMode:

例如

如何检查这一点以确保我的 iOS 5 及以下用户继续使用 UILineBreakMode?

0 投票
2 回答
656 浏览

ios - 无论使用什么字符串,sizewithfont 总是返回相同的值

我想根据它的文本计算一个 tableviewcell 的高度。我正在使用

但不知何故,返回值始终是 22(字体大小)。奇怪的是,当我使用

一切正常。但我更喜欢第一个版本,所以我可以轻松调整宽度。为什么它不起作用?

编辑:抱歉命名约定不好,但 userLabel 是 NSString 而不是标签

0 投票
2 回答
4688 浏览

iphone - 如何在 iOS UIAlertView 中调整文本标签

我一直在努力为我的 UIAlertView 调整标签,但我没有成功。我想让它根据字符串长度正确调整大小。我读到除了对它进行子类化之外没有什么可以做的,但是当我要这样做时,我发现了一个可以玩它的技巧。(下面的代码)

我可以成功地调整它的大小,为小字符串格式化字体等。我可以很好地适应我的一些字符串(<1000 个字符),但是更大的字符串(>1000 个字符)使它变得丑陋:

  • 标签只是拒绝增长以适应额外的内容
  • 尽管我减小了文本大小,但它并没有减小(对于不需要的较小字符串,它会减小。并且在需要较小的地方它仍然更大)
  • 对于较大的字符串,该标签以白色背景(在设计时在 IB 中看到的)显示,字符串的尾随部分因较大的文本而被隐藏起来。

整个事情看起来完全一团糟。

以下是我如何潜入 UIAlertView 外观代码:

请注意,注释行是我尝试过千次尝试的东西。未注释的也会产生相同的效果。正如我在这里编码的那样,较小的文本会调整。我只需要一个可以让我的标签显示所有文本的解决方案,而不管字符串长度如何 - 我知道它仍然有足够的空间,但它只是不会针对更大的字符串调整大小。

0 投票
1 回答
519 浏览

objective-c - CTFramesetterSuggestFrameSizeWithConstraints 返回超出约束的宽度?

在我的应用程序中,我需要根据其文本内容动态更改某些视图的大小。起初我-sizeWithFont用来做字符串测量。在我的应用程序中有很多测量要做,所以我把它-sizeWithFont放到了后台,因为苹果的文档说“在 iOS 10.4 及更高版本中,你可以从应用程序的辅助线程中使用此类扩展中描述的方法,而不仅仅是来自主线程。”。然而,事实是这个方法会调用一些不是线程安全的 WebCore 函数,所以应用程序会崩溃。此错误已提交,但仍未修复。(有关此的一些问题,例如MultiThread Crash 中的 sizeWithFont!

由于性能问题,我无法将测量结果放入主线程,因此我正在尝试 CoreText 框架。我首先为我的字符串创建一个对应项NSAttributedString,然后使用一些 CT 函数进行测量。我知道在 iOS 6 中,有非常简单的 API,比如-size可以完成这项工作,但由于兼容性,我无法使用它们。CTFramesetterSuggestFrameSizeWithConstraints()所以我不得不调用一些像or这样的低级函数CTFramesetterCreateFrame(),但我发现这些CT 方法有时不尊重我的约束例如,如果我CGSize(200, CGFLOAT_MAX)为设置 a CTFramesetterSuggestFrameSizeWithConstraints(),这应该意味着宽度有一个约束,但实际上它会返回一些具有更大宽度的尺寸,例如 205。同样的事情发生在CTFramesetterCreateFrame(). 如果我调用它然后调用CTFrameGetLines(),我有时会得到一个少于应有的行数,因为某些行的宽度超过 200 像素并且包含的​​单词比应有的多。

很抱歉描述太长,这是我的问题:

  1. 也许使用 CT 框架来测量一个简单的字符串是一种浪费,那么有没有办法让 -sizeWithFont 可以安全地在后台使用?
  2. 如果 的行为CTFramesetterSuggestFrameSizeWithConstraints()是设计使然,有没有办法让 CT 功能严格遵守我的约束?如果没有,我如何测量具有固定宽度的字符串并且换行模式是自动换行?