Iphone NSString sizeWithFont倒置

Iphone NSString sizeWithFont倒置,iphone,objective-c,uikit,Iphone,Objective C,Uikit,我们有这个功能: CGSize size = [cell.textLabel.text sizeWithFont:cell.textLabel.font constrainedToSize:CGSizeMake(cellWidth, FLT_MAX)]; 我们可以倒过来用吗? 我想看到文本,它可以是我的字体大小。 你有什么想法吗?你的意思是像ctframesetter建议的框架大小限制?它可用于在假定某些约束的情况下获取可见文本的范围 我找到了很好的解决方案: - (NSString*)str

我们有这个功能:

CGSize size = [cell.textLabel.text sizeWithFont:cell.textLabel.font constrainedToSize:CGSizeMake(cellWidth, FLT_MAX)];
我们可以倒过来用吗? 我想看到文本,它可以是我的字体大小。
你有什么想法吗?

你的意思是像
ctframesetter建议的框架大小限制?它可用于在假定某些约束的情况下获取可见文本的范围

我找到了很好的解决方案:

- (NSString*)stringVisibleInRect:(CGRect)rect inString:(NSString *)string {
    NSArray *words = [string componentsSeparatedByString:@" "];
    NSString *testString = [[NSString alloc] init];
    NSString *visibleString = @"";
    for (int i = 0; i < [words count] && [words count] > 0; i++)
    {
        NSString *newString = (NSString *)[words objectAtIndex:i];
        testString =[testString stringByAppendingFormat:@"%@ ",newString];

        CGSize maximumSize = CGSizeMake(rect.size.width, 9999);

        CGSize stringSize = [testString sizeWithFont:font
                                   constrainedToSize:maximumSize 
                                       lineBreakMode:UILineBreakModeWordWrap];

        if (stringSize.height > rect.size.height) // || stringSize.width > rect.size.width)
            break;

        visibleString = testString;
    }
    words = nil;
    return visibleString;
}
-(NSString*)stringVisibleInRect:(CGRect)rect inString:(NSString*)string{
NSArray*words=[string componentsSeparatedByString:@'];
NSString*testString=[[NSString alloc]init];
NSString*visibleString=@;
对于(int i=0;i<[words count]&&[words count]>0;i++)
{
NSString*newString=(NSString*)[words objectAtIndex:i];
testString=[testString stringByAppendingFormat:@“%@”,新闻字符串];
CGSize maximumSize=CGSizeMake(rect.size.width,9999);
CGSize stringSize=[testString sizeWithFont:font
constrainedToSize:最大大小
lineBreakMode:UILineBreakModeWordWrap];
if(stringSize.height>rect.size.height)//| | stringSize.width>rect.size.width)
打破
visibleString=testString;
}
字=零;
返回visibleString;
}

您所说的“反转”到底是什么意思?我想看看nsstring的符号数量以及我的大小和字体。CoreText API非常健谈且冗长,因此编写一个示例需要一段时间,但请查看调整字体大小代码,看看整个文本是否适合。非常感谢。我会试试。我发现它返回CGSize,但我不需要它。我只想查看文本长度。是的,但是您可以忽略返回值并将指向
CFRange
的指针作为
fitRange
参数传递。在关于
fitRange
的文档中:“返回时,包含实际适合受约束大小的字符串范围。”我不理解您的意思。我的代码:
CTFramesetterRef framesetter=CTFramesetterCreateWithAttributedString((CFAttributedStringRef)string)
CGSize textSize=CTFramesetterSuggestFrameSizeWithConstraints(framesetter,CFRangeMake(0,0),NULL,textRect.size,NULL)
我如何找到NSRange?这应该是可行的,事实上,如果您的目标是测量
UILabel
中有多少是可见的,那么这可能是一个更安全的选择,因为我猜
sizeWithFont:
方法使用与
UILabel
相同的字体代码。如果需要更精确的字体控制,我建议您使用CoreText进行测量和渲染,但正如您所看到的,API的级别非常低。我使用drawInRect,它工作得很好。非常简单的方法。