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中的准确高度了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值