相关疑难解决方法(0)

根据文字调整UILabel高度

考虑我在UILabel(动态文本的长行)中有以下文本:

由于外星军队的数量远远超过了团队,因此玩家必须利用后世界末日的世界,例如在垃圾箱,支柱,汽车,瓦砾和其他物体后面寻找掩护.

我想调整UILabel's高度,以便文本可以适应.我正在使用以下属性UILabel来使文本包装.

myUILabel.lineBreakMode = UILineBreakModeWordWrap;
myUILabel.numberOfLines = 0;
Run Code Online (Sandbox Code Playgroud)

如果我没有朝着正确的方向前进,请告诉我.谢谢.

cocoa-touch uikit uilabel ios

310
推荐指数
12
解决办法
26万
查看次数

CTFramesetterSuggestFrameSizeWithConstraints有时返回不正确的大小?

在下面的代码中,CTFramesetterSuggestFrameSizeWithConstraints有时返回一个CGSize高度不足以包含传递给它的所有文本的高度.我确实看过这个答案.但在我的情况下,文本框的宽度需要是恒定的.有没有其他/更好的方法来确定我的属性字符串的正确高度?谢谢!

CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attributedString);
CGSize tmpSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0,0), NULL, CGSizeMake(self.view.bounds.size.width, CGFLOAT_MAX), NULL); 
CGSize textBoxSize = CGSizeMake((int)tmpSize.width + 1, (int)tmpSize.height + 1);
Run Code Online (Sandbox Code Playgroud)

iphone xcode core-graphics core-text

12
推荐指数
2
解决办法
1万
查看次数

在Core Text中查找文本的边界rect

我正在尝试在Core Text中找到一行文本的边界.为简单起见,假设它有一个字符.目前我正在使用以下方法:

line = CTLineCreateWithAttributedString(attrString);
rect = CTLineGetImageBounds(line, context);
Run Code Online (Sandbox Code Playgroud)

它大部分时间都有效,但对于某些字符,如数学斜体d(Unicode:0x1D451)或数学斜体q(Unicode:0x1D45E),宽度有点短.

我尝试使用CTLineGetTypographicBounds()CTFramesetterSuggestFrameSizeWithConstraints,但他们也没有帮助(我认为他们使用字形的前进来找到宽度,而不是它的图形宽度.)由于字体本身不是斜体,我也不能使用倾斜角来纠正这个.

我尝试直接访问字形并使用CTFontCreatePathForGlyph(),但由于CGGlyph和UniChar都是16位而且我需要32位字符而失败.

有谁知道我做错了什么?如果是这样,那么正确的方法是什么?

更新:

为了确保它不是与字体相关的问题,我使用了不同的字体.即使是Arial Italic中的ASCII字符也存在问题.

更新:

忽略我以前的更新!原来这个(Arial Italic的问题)是我自己的错误.第一个问题仍然存在.

macos cocoa cocoa-touch core-text

7
推荐指数
1
解决办法
2514
查看次数

如何获得CTFrame上绘制的文本的真实高度

我有一定数量的文字填补了一些CTFrame(不止一个).要创建所有框架(每页一个),我将填充一个框架,获取未使用框架的文本CTFrameGetVisibleStringRange并重复此过程,直到处理完所有文本.

在除最后一帧之外的所有帧上,文本占据页面的相同高度.在最后一帧,我想知道文本占据的真实高度,知道我可以在哪里开始绘制更多文本.

有没有办法做到这一点?

UPDATE

根据评论的要求,这是我使用@omz建议的解决方案:

我在我的项目中使用ARC:

CTFrameRef locCTFrame = (__bridge CTFrameRef)ctFrame;

//Save CTLines
lines = (NSArray *) ((__bridge id)CTFrameGetLines(locCTFrame));

//Get line origins
CGPoint lOrigins[MAXLINESPERPAGE];
CTFrameGetLineOrigins(locCTFrame, CFRangeMake(0, 0), lOrigins);
CGFloat colHeight = self.frame.size.height;

//Save the amount of the height used by text
percentFull = ((colHeight - lOrigins[[lines count] - 1].y) / colHeight);
Run Code Online (Sandbox Code Playgroud)

cocoa-touch objective-c core-text

5
推荐指数
2
解决办法
4164
查看次数