Swift:Lable 高度计算误差
时间:2022-07-28
本文章向大家介绍Swift:Lable 高度计算误差,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
项目中,发现同样的代码,在swift里面计算出来的高度是有误差的
但是用oc确没这个问题
#import "PHString.h"
@implementation PHString
/// 获取字符串size
/// @param string 字符串
/// @param lineSpacing 行数
/// @param fontSize 字符串字号
/// @param rectSize 给一个固定的宽或者高
+ (CGSize)getStringRectWith:(NSString *)string
lineSpacing:(CGFloat)lineSpacing
fontSize:(CGFloat)fontSize
rectSize:(CGSize)rectSize {
UIFont *font = [UIFont systemFontOfSize: fontSize];
CGSize size = [self getStringRectWith:string lineSpacing:lineSpacing font:font rectSize:rectSize];
return size;
}
/// 获取字符串size
/// @param string 字符串
/// @param lineSpacing 行数
/// @param font 字符串字号
/// @param rectSize 给一个固定的宽或者高
+ (CGSize)getStringRectWith:(NSString *)string
lineSpacing:(CGFloat)lineSpacing
font:(UIFont *)font
rectSize:(CGSize)rectSize {
NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString: string];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
style.lineSpacing = lineSpacing;
[attributeString addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, string.length)];
[attributeString addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, string.length)];
NSStringDrawingOptions options = NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading;
CGRect rect = [attributeString boundingRectWithSize:CGSizeMake(rectSize.width, rectSize.height) options:options context:nil];
NSLog(@"size:%@", NSStringFromCGSize(rect.size));
return rect.size;
}
@end
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface PHString : NSObject
/// 获取字符串size
/// @param string 字符串
/// @param lineSpacing 行数
/// @param fontSize 字符串字号
/// @param rectSize 给一个固定的宽或者高
+ (CGSize)getStringRectWith:(NSString *)string
lineSpacing:(CGFloat)lineSpacing
fontSize:(CGFloat)fontSize
rectSize:(CGSize)rectSize;
/// 获取字符串size
/// @param string 字符串
/// @param lineSpacing 行数
/// @param font 字符串字号
/// @param rectSize 给一个固定的宽或者高
+ (CGSize)getStringRectWith:(NSString *)string
lineSpacing:(CGFloat)lineSpacing
font:(UIFont *)font
rectSize:(CGSize)rectSize;
@end
NS_ASSUME_NONNULL_END
swift中引用
// MARK: 计算文字尺寸,可以处理计算带行间距的
/// 计算文字高度,可以处理计算带行间距的
/// - Parameters:
/// - rectString: 文字
/// - rectWidth: 文字限制宽度
/// - fontSize: 文字大小 -- 默认为不加粗
func getBoundingFontHeight(rectWidth: CGFloat = CGFloat(MAXFLOAT), font: UIFont, lineSpacing: CGFloat = 0) -> CGFloat {
if self.isEmpty {
return 0.0
}
let rectSize = CGSize(width: rectWidth, height: CGFloat(MAXFLOAT))
let size = PHString.getRectWith(self, lineSpacing: lineSpacing, font: font, rectSize: rectSize)
return size.height
}
这样就可以算出字符串在lable中的准确高度了
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法