首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用NSMutableAttributedString后,UILabel中的numberOfLines无法正常工作

的原因是NSMutableAttributedString会改变UILabel的文本属性,从而影响文本的布局和显示。numberOfLines属性用于指定UILabel的最大行数,当文本超过指定行数时,会自动截断并显示省略号。

解决该问题的方法是使用boundingRectWithSize方法来计算NSMutableAttributedString的文本高度,并根据计算结果手动设置UILabel的frame和numberOfLines属性。具体步骤如下:

  1. 创建一个NSMutableAttributedString对象,并设置相应的文本属性。
  2. 使用boundingRectWithSize方法计算NSMutableAttributedString的文本高度,需要指定一个CGSize对象作为计算的限制条件,其中宽度需要与UILabel的宽度保持一致,高度设置为一个较大的值,例如CGFLOAT_MAX。
  3. 根据计算得到的文本高度,结合UILabel的字体大小和行间距等属性,计算出UILabel的实际行数。
  4. 根据实际行数设置UILabel的numberOfLines属性,并根据计算得到的文本高度设置UILabel的frame。

以下是一个示例代码:

代码语言:txt
复制
// 创建NSMutableAttributedString对象,并设置文本属性
let attributedString = NSMutableAttributedString(string: "Your attributed string")

// 设置NSMutableAttributedString的文本属性,例如字体、颜色等

// 计算NSMutableAttributedString的文本高度
let maxSize = CGSize(width: label.frame.width, height: CGFloat.greatestFiniteMagnitude)
let textHeight = attributedString.boundingRect(with: maxSize, options: .usesLineFragmentOrigin, context: nil).height

// 计算UILabel的实际行数
let font = label.font
let lineHeight = font.lineHeight
let numberOfLines = Int(ceil(textHeight / lineHeight))

// 设置UILabel的numberOfLines属性和frame
label.numberOfLines = numberOfLines
label.frame.size.height = textHeight

// 设置UILabel的文本为NSMutableAttributedString
label.attributedText = attributedString

在腾讯云的产品中,可以使用腾讯云移动直播(https://cloud.tencent.com/product/mlvb)来实现音视频直播功能,腾讯云对象存储(https://cloud.tencent.com/product/cos)来存储和管理多媒体文件,腾讯云人工智能(https://cloud.tencent.com/product/ai)来实现人工智能相关的功能,腾讯云物联网(https://cloud.tencent.com/product/iotexplorer)来构建物联网应用,腾讯云云原生应用引擎(https://cloud.tencent.com/product/tcaplusdb)来构建云原生应用等。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS文本尺寸自适应异步计算实现

方法可以运行在任意线程,因此可以有效应用在那些异步算高或者要求尺寸进行提前计算场景。...从iOS官方实现可以看出文本算高会考虑简单文本字符串、属性字符串、字体大小、最大显示行数numberOfLines、段落信息、 段落对齐方式、断字方式、段落首行缩进、阴影偏移等等因素。...下面就是具体实现代码: /// 使用此方法时请标明源作者:欧阳大哥2013。本方法符合MIT协议规范。...sizeThatFits参数意义。.../// @param font 指定计算时文本字体,可以为nil表示使用UILabel控件默认17号字体 /// @param textAlignment 指定文本对齐方式默认是NSTextAlignmentNatural

1.5K40

UI篇-CATextLayer和 富文本交融

NSMutableAttributedString有可以最自己内容作出颜色以及大小调整,这样结合起来使用的话,就远比UILabel 灵活多,效果也酷炫多,也许CATextLayer就是为了NSMutableAttributedString...下面就简要介绍下CATextLayer 常规使用,不足之处,还望朋友们下面留言补充,不胜感谢。...在使用通过将AttributedString赋值给控件 attributedText 属性来添加文字样式。有属性控件有UILabel、UITextField和UITextView。...使用方式一 初始化一个NSMutableAttributedString,然后向里面添加文字样式,将其赋给控件 *attributedText*属性。...drawAtPoint和drawInRect区别是一个可以自动换行,不过代价是 不设置属性,都是默认属性有时候是无法接受

2.5K10
  • iOS文本布局探讨之三——使用TextKit框架进行富文本布局

    iOS文本布局探讨之三——使用TextKit框架进行富文本布局 一、引言         关于图文混排,其实以前博客已经讨论很多,在实际开发,经常使用第三方框架来完成排版需求,其中RCLabel...二、原生UILabel真的只能渲染文字么?         CoreText是一个比较底层且十分强大文本渲染框架,但是其使用起来并不是十分方便。在较低版本iOS系统,要进行富文本排版十分困难。...在iOS6,系统为UILabel,UITextView等这类文本渲染控件引入了NSAttributedString属性,有了NSAttributedString这个类,创建灵活多彩文本控件变得十分轻松...:label]; } 运行工程,效果如下图所示,其实只使用UILabel也可以实现复杂富文本和图文混排: ?...三、为富文本附件添加用户交互能力         TextKit框架强大到只使用UILabel就可以完成复杂富文本布局,但是UILabel有一个致命缺陷,其无法进行用户交互。

    2.1K20

    解决 requests 库 Post 请求路由无法正常工作问题

    解决 requests 库 Post 请求路由无法正常工作问题是一个常见问题,也是很多开发者在使用 requests 库时经常遇到问题。本文将介绍如何解决这个问题,以及如何预防此类问题发生。...问题背景用户报告,Post 请求路由在这个库不能正常工作。用户使用了 requests 库,并遇到了问题。用户还提供了详细错误信息和系统信息。...,用户试图通过 requests 库发送一个 Post 请求到 API 端点,但是请求无法成功。...用户已经确认使用了正确请求方法和参数,但是仍然无法解决问题。...系统信息通常包含问题发生时环境信息,例如使用 Python 版本、使用 requests 库版本、使用操作系统等。

    44220

    Swift 3.0 探索之 UILabel

    开篇 最近闲来无事,看看Swift3.0,发现和我认识1.0有很大不同了,如果不学习一下估计会落伍了,所以探究一下 Swift 在开发使用(当然目前是初级水平,一起进步嘛,也欢迎菜鸟,大神一起探讨...QQ群 139852091) 正题 UILabel是我们开发中常用控件了,我今天就拿它开刀,看一下我们在开发中常用UILabel属性 创建已经常规设置 //let 变量名字 = 变量类型...myLabel.numberOfLines = 0 //返回int 类型 设置0没有行数限制 1、2、3、4对应1、2、3、4行 设置高亮属性 myLabel.isHighlighted...�图1 NSAttributedString 富文本 我们还经常使用 Label 一个属性是NSAttributedString 我们看一下这个在Swift里面怎么使用 ****当设置NSAttributedString...= NSMutableAttributedString(string:"我是一个Label") //range NSMakeRange 从文本 XX位开始 开始 XX个字符

    80930

    无法修复正在使用磁盘_硬盘无法正常弹出是什么原因

    前段时间中了N次毒,重装了N次机器,在与病毒战斗损失惨重,在此哀悼为之牺牲脑细胞和时间。 以前遇到问题总想在网上找答案,也受到了很多帮助和启发。今天也把自己心得写下来,供各位参考。...3、以上两步完成病毒清理工作,接着要将“后遗症”治愈。...其次由于删除了各硬盘下autorun.inf可能会造成各硬盘双击无法打开,用一下方法修复: 右键点击某一硬盘,选择弹出菜单“打开”,进入硬盘。...点击文件菜单栏“工具=〉文件夹选项”,在弹出对话框选择“文件类型”=〉“高级”,选择“新建”: 在弹出对话框,“操作”栏填写“open”,“用于执行操作应用程序”栏填写“explorer.exe”...返回菜单选择“open” 项,点击“设为默认值”,确定退出。 重新启动计算机,各硬盘便可双击打开。 以上便是手刃fun.xls.exe方法。 要扫除害人虫,全无敌。

    1.3K10

    Flutter中富文件标签解决方案

    与 RichText 还解析不了这种格式,但是你也不能使用 WebView 插件,如果使用了,你会在每一个Item嵌入一个浏览器内核,再强手机,也会卡,当然肯定不能这样做,因为这样就是错误做法...*** 2 烧脑思考实践一 Flutter 应用程序被 Android iOS平台加载,在原生 Android 使用TextView就可轻松实现解析(如下代码清单2-1),当然在iOS中使用UILabel...= [UIColor cyanColor]; _uiLabel.numberOfLines = 0; _uiLabel.attributedText = attributedString; [_uiLabel...,其实小编在开发前就觉得不太合适,不过以小编个性,非得尝试验证一下,现结果出来了,就是在加载时,由于应用在列表使用 HTMLTextWidet 会有短暂黑屏效果,而且内存出吃不消,如下图所示:...flutter_html_rich_text 综合实现思路就是 使用 HTML 库完善了【烧脑思考实践二】解析。

    1.5K11

    UILabel在开发常用功能总结

    在项目开发,我们经常会遇到在这样情形: 1、在一个UILabel 使用不同颜色或不同字体来体现字符串 在iOS 6 以后我们可以很轻松实现这一点,官方API 为我们提供了UILabel...attributedText, 使用不同颜色和不同字体字符串,我们可以使用NSAttributedText 和 NSMutableAttributedText 类来实现。...赋值 label.attributedText = attribtStr; [self.view addSubview:label]; // label加划线 UILabel *label2 =...[[UILabel alloc]initWithFrame:(CGRectMake(20, 60, 300, 30))]; label2.text = @"给Label添加划线,表示为打折出售"; /...有时文字多少是不确定,这时就需要我们判断这些文字宽和高,以便于正确定义label位置大小 NSString *layoutStr = @"iOS UILabel自适应宽度"; UILabel

    93920

    html图片自适应div大小_未知宽高div元素垂直水平居中

    大家好,又见面了,我是你们朋友全栈君。...1.设置labelhtml图片 -(NSMutableAttributedString *)setAttributedString:(NSString *)str { //如果有换行,把\n替换成...*htmlString =[[NSMutableAttributedString alloc] initWithData:[str dataUsingEncoding:NSUTF8StringEncoding...计算出来 height 正好是排版高度大小,是 CGFloat 类型,在是在我们设置UIlabel/Cell 高度时,可能存在四舍五入等,最后存在一点点误差使得 UILabel 显示不全,可能出现缺少一行...,上下空白太多等情况; 解决方案:为了确保布局按照我们计算数据来,可以使用ceil函数对计算 Size 取整,再加1,确保 UILabel按照计算高度完好显示出来; 或者使用方法CGRectIntegral

    2.8K20

    六天完成一个简单iOS App - 第二天

    第二天任务: 项目主框架搭建完毕,就可以从各个模块入手完成项目,这里从最简单关注模块开始。 关注页面的搭建 登录界面的搭建 方法抽取与知识点总结 一....xib想要让label文字换行时,需要使用option+enter组合键进行换行,使用"\n"是不管用。...另外设置占位文字颜色,以后再其他模块或者其他项目中都有可能频繁使用,因此给textfield添加分类,使占位文字设置更加方便。...,下面我们来看一些使用实例 图文混排 UILabel *label = [[UILabel alloc] init]; label.frame = CGRectMake(100, 100, 200,...UILabel *label = [[UILabel alloc] init]; // 设置属性文字 NSString *text = @"你好\n哈哈哈"; NSMutableAttributedString

    2.1K50

    1.注册或登录页面设计:UILabel,UIButton,UITextField

    学习iOS开发已经有一段时日了,之前一直没有系统对iOS开发相关知识进行归纳总结,导致很多知识点云里雾里在脑子里形不成iOS开发思想,现将自己在学习过程遇到一些知识进行总结,希望能对iOS初学者能有一定帮助...为了让繁琐知识点介绍不至于太枯燥泛味,我采用“总-->分”方式来进行讲解,即先介绍结果,让大家提起兴趣来,然后再针对结果遇到各个知识点来分别进行讲解。...一.注册或登录界面 如下图,实现了一个注册或登录界面,这里先只介绍单个页面,不介绍点击“完成”按钮动作,在之后系列《iOS开发入门总结》中会逐步介绍,等基础知识介绍差不多了,就可以以一个完整注册系统作为小结...label5.numberOfLines = 2; UIlabel.backgroudColor=[UIColor clearColor]; //可以去掉背景色 //设置高亮 label6.highlighted...,此时设置为白色 如果使用了自定义背景图片边框会被忽略掉 text.backgroundColor = [UIColor whiteColor]; //设置背景图片 text.background

    2.4K50

    CoreText实现图文混排

    它良好结合了 UIKit 和 Core Graphics/Quartz: UIKit UILabel 允许你通过在 IB 简单拖曳添加文本,但你不能改变文本颜色和其中单词。...* label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 200, 400)]; label.numberOfLines =...所以设置代理要按照人家方法来啊。 看看这几句代码也很好懂,就是注释意思。 三句分别就是说当我需要走这些代理时候都会走那些代理方法。 好吧,扯到这又要补充知识了。...所以要生成一个相同元素个数数组去盛放origin对象。 然后用CTFrameGetLineOrigins获取所有原点。 到此,我们计算frame准备工作完成了。才完成准备工作。...好了,至此你已经完成图片绘制了。只要在ViewController里面引入你绘制CoreText文本View正常初始化添加子视图就可以了。 好吧,这个教程我也是综合了很多资料写出来

    1.7K20
    领券