当前位置: 首页 > 知识库问答 >
问题:

使用属性文本获取标签的动态高度(属性文本包含超文本标记语言字符串)

闻人锦
2023-03-14

我想要属性文本的动态高度…
我的代码有时会得到完美的高度,但并非一直如此…当我的html文本太大时,我会弄错高度…(当我的html内容太小时,它会很完美,但当html内容太大时就不起作用)

我已经得到了如下所示的html内容属性文本的大小

>

  • 我用以下方法将我的html字符串转换为属性字符串NSDictional*fontDict=[NSDictionaryWithObject: font常规(13)forKey: NSFontAt⃣teName]; attrCoupon=[[NSMutableAt⃣tedString alloc]initWithString:[NSString stringWithFormat:@"%@" , __detail]属性: fontDict];

    我正在以以下方式获取属性字符串的高度CGRect rect = [attrCoupon 边界矩形使用大小:(CGSize){self.tbl_details.frame.size.宽度 ,CGFLOAT_MAX} 选项:NSStringDrawing使用线碎片原创|NSStringDrawing使用字体引线上下文:nil];

    >

  • (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath{CGRect rect=[attrCoupon boundingRectWithSize:(CGSize){self.tbl_details.frame.size.width-30,CGFloat_MAX}选项:NSStringDrawingUsesLineFragmentOrigin | NSStringdrawingUses FontLeading上下文:nil];

    CGS 大小最终大小 = 矩形大小;返回最终大小高度 ;}

    4.-(UITableViewCell *)table view:(UITableView *)table view cell for rowatindexpath:(NSIndexPath *)index path

     NSAttributedString *attMerchnat1 = [[NSAttributedString alloc] initWithData:[_ObjCoupon.coupon_detail dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute:              NSHTMLTextDocumentType } documentAttributes:nil error:nil];
    
                CGRect rect = [attMerchnat boundingRectWithSize:(CGSize){self.tbl_details.frame.size.width, CGFLOAT_MAX}options:NSStringDrawingUsesLineFragmentOrigin
                               context:nil];
    
                cell.lblDetail.font = fontRegular(13);
                cell.lblDetail.attributedText = attMerchnat1;
                cell.lblDetail.frame = CGRectMake(10,3,cell.frame.size.width-20, rect.size.height);
                cell.lblDetail.numberOfLines = 0;
                cell.lblDetail.font = fontRegular(13);
                [cell.lblDetail sizeToFit];
    

    我已经尝试了堆栈上提供的所有解决方案,但都不起作用…我需要帮助。

  • 共有1个答案

    万俟财
    2023-03-14

    请使用此方法。

    - (CGSize)getSizeforController:(id)view{
        UILabel *tempView =(UILabel *)view;
        NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];
        context.minimumScaleFactor = 0.8;
        float width = tempView.frame.size.width;
        CGSize size=[tempView.text boundingRectWithSize:CGSizeMake(width, 2000)
                                                options:NSStringDrawingUsesLineFragmentOrigin
                                             attributes:@{ NSFontAttributeName : tempView.font}
                                                context:context].size;
        return size;
    }
    

    这可能会有帮助。

     类似资料: