前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift:Lable 高度计算误差

Swift:Lable 高度计算误差

作者头像
菜菜不吃蔡
发布2020-10-27 14:48:14
9740
发布2020-10-27 14:48:14
举报
文章被收录于专栏:编程语言编程语言编程语言

项目中,发现同样的代码,在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中的准确高度了

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-10-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档