gpt4 book ai didi

ios - 计算 UILabel 文本大小

转载 作者:IT老高 更新时间:2023-10-28 11:32:01 25 4
gpt4 key购买 nike

我正在以编程方式绘制 UILabels。他们从数据库中获取大小。所以我不能只使用 sizeToFit。我已经实现了一个以通过率重绘 UILabels 的函数。所以我只需要从我的 View 中找到 UILabel 中的文本,这将需要最大比率来重绘 UILabel。所以最后我需要做这样的事情:

    double ratio = 1.00;
for (UILabel* labels in sec.subviews) {

float widthLabel = labels.frame.size.width;
float heightLabel = labels.frame.size.height;
float heightText = //get the text height here
float widthText = //get the text width here
if (widthLabel < widthText) {
ratio = MAX(widthText/widthLabel,ratio);
}
if (heightLabel < heightText) {
ratio = MAX(heightText/heightLabel, ratio);
}
}
//redraw UILabels with the given ratio here

那么我怎样才能获得文本的高度和宽度大小,因为我的一些文本不适合标签我不能简单地使用标签边界?我正在使用 Xcode 5 和 iOS 7。

最佳答案

所有 [NSString sizeWithFont...] 方法在 iOS 7 中都已弃用。请改用它。

CGRect labelRect = [text
boundingRectWithSize:labelSize
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{
NSFontAttributeName : [UIFont systemFontOfSize:14]
}
context:nil];

另见 https://developer.apple.com/documentation/foundation/nsstring/1619914-sizewithfont .

更新 - boundingRectWithSize 输出示例

根据您的评论,我做了一个简单的测试。代码和输出如下。

// code to generate a bounding rect for text at various font sizes
NSString *text = @"This is a long sentence. Wonder how much space is needed?";
for (NSNumber *n in @[@(12.0f), @(14.0f), @(18.0f)]) {
CGFloat fontSize = [n floatValue];
CGRect r = [text boundingRectWithSize:CGSizeMake(200, 0)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:fontSize]}
context:nil];
NSLog(@"fontSize = %f\tbounds = (%f x %f)",
fontSize,
r.size.width,
r.size.height);
}

这会产生以下输出(请注意,随着字体大小变大,边界会按预期变化):

fontSize = 12.000000    bounds = (181.152008 x 28.632000)
fontSize = 14.000000 bounds = (182.251999 x 50.105999)
fontSize = 18.000000 bounds = (194.039993 x 64.421997)

关于ios - 计算 UILabel 文本大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19128797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com