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

在iOS 14上,adjustsFontSizeToFitWidth无法与NSMutableAttributedString一起正常工作

在iOS 14上,adjustsFontSizeToFitWidth属性与NSMutableAttributedString一起使用时可能会出现问题。adjustsFontSizeToFitWidth是UILabel的一个属性,用于自动调整文本字体大小以适应标签的宽度。NSMutableAttributedString是一个可变的富文本字符串,可以对字符串的不同部分应用不同的样式。

当将NSMutableAttributedString应用于UILabel时,adjustsFontSizeToFitWidth属性可能无法正常工作。这是因为NSMutableAttributedString包含了多个不同样式的文本部分,而adjustsFontSizeToFitWidth只能应用于整个标签的文本。

解决这个问题的方法是手动计算NSMutableAttributedString的大小,并根据需要调整字体大小。可以使用boundingRectWithSize方法来计算NSMutableAttributedString的大小,然后根据计算结果来调整字体大小。

以下是一个示例代码,演示了如何在NSMutableAttributedString上手动调整字体大小:

代码语言:txt
复制
let attributedString = NSMutableAttributedString(string: "Hello World")
attributedString.addAttribute(.font, value: UIFont.systemFont(ofSize: 20), range: NSRange(location: 0, length: 5))
attributedString.addAttribute(.font, value: UIFont.systemFont(ofSize: 30), range: NSRange(location: 6, length: 5))

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 50))
label.attributedText = attributedString

let maxSize = CGSize(width: label.bounds.width, height: CGFloat.greatestFiniteMagnitude)
let boundingRect = attributedString.boundingRect(with: maxSize, options: [.usesLineFragmentOrigin, .usesFontLeading], context: nil)

if boundingRect.size.width > label.bounds.width {
    let scaleFactor = label.bounds.width / boundingRect.size.width
    let scaledFont = UIFont.systemFont(ofSize: 30 * scaleFactor)
    attributedString.enumerateAttribute(.font, in: NSRange(location: 0, length: attributedString.length), options: []) { (value, range, _) in
        if let currentFont = value as? UIFont {
            let scaledDescriptor = currentFont.fontDescriptor.withSize(currentFont.pointSize * scaleFactor)
            let scaledFont = UIFont(descriptor: scaledDescriptor, size: scaledDescriptor.pointSize)
            attributedString.addAttribute(.font, value: scaledFont, range: range)
        }
    }
}

label.attributedText = attributedString

在这个示例中,我们创建了一个NSMutableAttributedString,其中包含了两个不同样式的文本部分。然后,我们创建了一个UILabel,并将NSMutableAttributedString应用于标签的attributedText属性。接下来,我们使用boundingRectWithSize方法计算NSMutableAttributedString的大小,并根据需要调整字体大小。最后,我们将调整后的NSMutableAttributedString再次应用于标签的attributedText属性。

需要注意的是,这只是一个解决方案的示例,实际应用中可能需要根据具体需求进行调整。另外,腾讯云提供了丰富的移动开发相关产品和服务,例如移动推送、移动分析、移动测试等,可以帮助开发者更好地构建和管理移动应用。具体产品和服务的介绍可以参考腾讯云移动开发相关文档和官方网站。

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

相关·内容

  • UI篇-CATextLayer和 富文本的交融

    字.gif CATextLayer与CAShapeLayer(波浪) ?...NSString *str0 = @"设置字体格式和大小"; NSDictionary *dictAttr0 = @{NSFontAttributeName:[UIFont systemFontOfSize:14...文字方向 @[@(1),@(2)] 分别代表不同的文字出现方向等等,我想你一定用不到它 - - //NSVerticalGlyphFormAttributeName 水平或者竖直文本 1竖直 0水平 在iOS...没卵用,不支持竖版 2.设置段落样式:段落样式中允许你设置文字与文字之间的行间距、字符间距、以及对齐模式,但是注意的是,在设置段落样式的时候,必须保证控件的 numberofline属性必须为0 NSMutableAttributedString...textV.textColor = [UIColor whiteColor]; 值得注意的地方是 drawAtPoint和drawInRect的区别是后一个可以自动换行,不过代价是 不设置属性,都是默认的属性有时候是无法接受的

    2.6K10

    iOS富文本使用指南: 1、封装富文本API,采用block实现链式编程 2、 超链接属性 3、HTML字符串与富文本互转

    *xx = [[NSMutableAttributedString alloc]init]; xx.kn_addString(@"封装富文本API").kn_fontColor...NSForegroundColorAttributeName 等信息) 4.2、实现代理方法textView:shouldInteractWithURL:inRange,处理点击超链接的回调(打开对应URL Webview) III、HTML字符串与富文本互转...专注《iOS应用逆向与安全》(包括iOS基础)"; NSAttributedString *attStr = [[...NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType} documentAttributes:nil error:nil]; IV、富文本在适配系统...API的应用例子 4.1 适配iOS13UI控件UITextField的_placeholderLabel 私有API 问题:iOS13无法直接访问_placeholderLabel.textColor

    1.5K10

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

    iOS文本布局探讨之三——使用TextKit框架进行富文本布局 一、引言         关于图文混排,其实以前的博客已经讨论很多,在实际开发中,经常使用第三方的框架来完成排版的需求,其中RCLabel...在较低版本的iOS系统中,要进行富文本排版十分困难。...在iOS6中,系统为UILabel,UITextView等这类文本渲染控件引入了NSAttributedString属性,有了NSAttributedString这个类,创建灵活多彩的文本控件变得十分轻松...三、为富文本附件添加用户交互能力         TextKit框架强大到只使用UILabel就可以完成复杂的富文本布局,但是UILabel有一个致命的缺陷,其无法进行用户交互。...结合使用NSTextAttachment与UITextView,这些都能实现。

    2.1K20

    iOS开发之微信聊天页面实现

    在聊天页面中主要用到了TableView的知识,还有如何在俩天中显示我们发送的表情,具体请参考之前的博客:IOS开发之显示微博表情,在这儿就不做赘述啦。...在聊天页面用到了三对,六种Cell,不过cell的复杂度要比之前的新浪微博(IOS开发之新浪围脖)简单的多。废话少说吧,还是先来几张效果图,在给出实现代码吧。   ...当点击图片时会跳转到另一个Controller中来进行图片显示,在图片显示页面中添加了一个捏合的手势(关于手势,请参考:iOS开发之手势识别)。...一,定义我们要用的cell,代码如下:     1,显示表情和text的cell,代码如下,需要根据NSMutableAttributedString求出bound,然后改变cell上的ImageView...}     5.从本地获取图片,并显示在相应的Cell上,代码如下: 1 //获取图片后要做的方法 2 -(void)imagePickerController:(UIImagePickerController

    4.2K70

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

    学习iOS开发已经有一段时日了,之前一直没有系统的对iOS开发的相关知识进行归纳总结,导致很多知识点云里雾里在脑子里形不成iOS开发的思想,现将自己在学习过程中遇到的一些知识进行总结,希望能对iOS初学者能有一定的帮助...最初学iOS的时候苦于没有大神指点,全靠自己一点点摸索,确实走了很多弯路,不希望还有小伙伴跟我一样走过多的弯路。   ...一.注册或登录界面 如下图,实现了一个注册或登录界面,这里先只介绍单个页面,不介绍点击“完成”按钮后的动作,在之后的系列《iOS开发入门总结》中会逐步介绍,等基础知识介绍的差不多了,就可以以一个完整的注册系统作为小结...60+40*3+20, 100, 37); 80 [confirmButton setTitle:@"确定" forState:UIControlStateNormal]; //正常状况下...上的位置 button1.frame = CGRectMake(20, 20, 280, 20); //button背景色 button1.backgroundColor

    2.4K50

    50行代码实现图文混排案例一

    现在的做法 苹果在iOS7中推出了一个新的类NSTextAttachment,它是做图文混排的利器,本文就是用这个类,只用50行代码实现文字与表情混排,当然也可以实现段落中的图文混排,与CoreText...先上效果图,聊天界面中的图文混排: 要实现这样的效果,code4app上似乎有很多种做法,还有一些奇葩的一个字符一个label,但是今天要讲述的做法,是目前为止我看到的最简单的做法了,只用一个UILabel...//1、创建一个可变的属性字符串 NSMutableAttributedString*attributeString = [[NSMutableAttributedString alloc]initWithString...类型的字符串可以添加多种属性,并且在计算的时候必须设置字符大小等属性。...2、图片拉伸 在iOS5之前可以用stretchableImageWithLeftCapWidth: topCapHeight: iOS5之中用resizableImageWithCapInsets:

    1.2K10

    CoreText实现图文混排

    严肃的就是iOS7新推出的类库Textkit,其实是在之前推出的CoreText上的封装,根据苹果的说法,他们开发了两年多才完成,而且他们在开发时候也将表情混排作为一个使用案例进行研究,所以要实现表情混排将会非常容易...在iOS中,我们有一个专门的类来处理富文本 AttributeString。 ---- 富文本的基本使用方法 诶,标题越来越小了,都4个#号了,说明我扯远了啊。...事实上此处你可以绑定任意对象。此处你绑定的对象既是回调方法中的参数ref。 好吧就然说到这我就直接把那三个回调方法说了吧,放在一起比较好理解一些。...然后建立一会绘制的尺寸,实际上就是在指定你的绘制范围。 接着生成整个富文本绘制所需要的frame。...到此,我们计算frame的准备工作完成了。才完成准备工作。

    1.8K20

    Swift:静态工厂方法

    iOS上的UIKit和Mac上的AppKit都为我们提供了创建具有原生外观的UI所需的所有基本核心构建块,但是我们经常需要自定义这些外观以适合我们的设计并为其定义布局。...尽管子类化是一项重要的语言功能,即使在面向协议的编程时代,也很容易将自定义设置与自定义行为混淆。我们并没有在上面的UILabel中真正添加任何新行为,我们只是在设置一个实例。...因此,问题是子类是否真的适合此处的工作? 相反,让我们尝试使用静态工厂方法来实现相同的目的。...我们要做的是在 UILabel 上添加一个扩展,使我们能够从上面创建与 TitleLabel完全相同设置的新实例,如下所示: extension UILabel { static func makeForTitle...虽然我们可能无法完全摆脱视图控制器(或与此相关的视图)的子类化,但是某些类型的视图控制器可以从工厂方法中受益。

    2.4K10

    【IOS开发高级系列】异步绘制专题

    优劣比较 存储速度:JPG更快 压缩比:JPG更大; 图片质量:JPG更好 JPG不支持透明效果; UIImageJPEGRepresentation方法在耗时上比较少...5.1 常见问题 5.1.1 CGBitmapContextCreateImage绘制后内存泄露导致内存告警 CGBitmapContextCreateImage绘制的图片会造成内存无法释放...: self.imageData]; //将等比压缩过的image在赋在转成data赋给self.imageData NSData *data =UIImageJPEGRepresentation(image...tid=31835 iOS异步图片加载优化与常用开源库分析 http://luoyibu.com/2015/05/12/iOS异步图片加载优化与常用开源库分析/ 主题:图片处理开源函数ImageProcessing...UIGraphicsGetImageFromCurrentImageContext引发内存暴涨,导致应用被结束掉 http://blog.163.com/l1_jun/blog/static/1438638820155593641529/ 在iOS

    1.4K20

    IOS开发系列——异步绘制专题

    优劣比较 存储速度:JPG更快 压缩比:JPG更大; 图片质量:JPG更好 JPG不支持透明效果; UIImageJPEGRepresentation方法在耗时上比较少 而UIImagePNGRepresentation...常见问题 5.1.1 CGBitmapContextCreateImage绘制后内存泄露导致内存告警 1、 CGBitmapContextCreateImage绘制的图片会造成内存无法释放...:self.imageData]; //将等比压缩过的image在赋在转成data赋给self.imageData NSData *data =UIImageJPEGRepresentation(image...tid=31835 iOS异步图片加载优化与常用开源库分析 http://luoyibu.com/2015/05/12/iOS异步图片加载优化与常用开源库分析/ 主题 : 图片处理开源函数ImageProcessing...iOS 中与CGContextRef 的内存泄漏 http://www.itstrike.cn/Question/55b86ce7-dfba-4548-a103-22dc5317420a.html Quartz

    1.5K20

    直播APP的性能优化-礼物篇

    介绍 记录、总结开发遇到一些问题,大家一起交流学习。 这次带来,对直播APP性能优化的总结,以QA的形式总结。 欢迎关注文集-直播Live 实现方式 1、Q:礼物动画如何实现?...A:逻辑上,礼物连击可以看成多个桶排成的队列,礼物赠送者id+礼物类型相同的放在一个桶内。连击过程中,可以不断往桶里放礼物。如果连击完成,桶里没有礼物,开始放下一个桶的礼物。...实现上,给礼物数字放大缩小动画设置delegate,在stop回调的时候进行上述的逻辑判断即可。 5、Q:小礼物的连击数字是[0-9]的文字图片组成的,每次显示都需要拼接图片,如何优化?...= [[NSMutableAttributedString alloc] initWithString:sendGiftNumStr]; UIImage *giftNumIcon = [UIImage...The issue is that iOS 7 apps cannot have JPEG images in the CAR file. actool should have copied the JPEG

    2K60

    iOS学习——UIAlertController详解

    这两天项目中统一对已经被iOS API废弃的UIAlertView和UIActionSheet进行替换,我们知道,UIAlertView和UIActionSheet都已经被iOS的API所废弃了。...UIAlertController是在iOS8.0中出现的一种统一的提示风格的界面,代替原来的UIAlertView和UIActionSheet两种类别。...1.2.1 UIAlertController上添加按钮    UIAlertController上的每一个按钮都是一个UIAlertAction,与UIAlertController的类型是UIAlertView...  上面我们讲到了如何在UIAlertController提示器上添加按钮,但是有时候,我们需要在提示器上添加一个或多个文本框让用户填写一些信息,在UIAlertController中也提供了一个方法直接可以在提示器上添加文本框...的风格类型为UIAlertView时才有 文本框的添加多个 我们可以看到,在配置文本框这里还有一个参数是textFields,这各参数是一个只读数组类型,用于获取UIAlertController提示器上所有的文本框对象

    3.4K170

    iOS音频播放器锁屏歌词显示与性能优化 原

    iOS音频播放器锁屏歌词显示与性能优化 一、引言     前边有博客探讨了有关iOS开发中音频播放的技术与进行后台音频播放并在后台与用户进行交互的方法,本篇将探讨一种在锁屏界面同步显示歌词歌词的方法,...iOS后台音频开发与交互技术:http://my.oschina.net/u/2340880/blog/420183。...二、在锁屏界面同步显示歌词    我们知道,在音频后台播放时,锁屏界面的信息是由MPNowPlayingInfoCenter来设置的,其中的歌曲信息字典可以设置类似歌曲封面,艺术家,歌曲名,歌曲时间等。...上面4点需求,前两点十分容易搞定,在AppDelegate中有如下的方法可以监听应用程序前台与后台的切换: //应用进入后台时调用 - (void)applicationWillResignActive...由于前面博客已经详细的介绍了音频开发与后台交互的内容,这篇博客主要探讨了锁屏歌词相关的开发思路与优化方向,提供的示例代码都是片段,并不完整,经过优化的音频播放器源码在如下git地址上,需要的朋友可以作为参考

    1.1K20

    IOS本地化应用

    (2)冻结UI 在应用开发的周期中必需要有一个明白的时间点来冻结UI。在此之后要坚决杜绝会影响本地化的资源变更。nib 文件能够在XCode中锁定。...依据翻译的文本进行本地化工作。 (4)版本号控制用版本号控制系统记录下你的每一次变更。 (5)測试不用怎么说,必需要的步骤。 (6a)合并逻辑变更逻辑变更一般不会影响到nib文件和本地化的工作。...2、IOS应用国际化教程(2014版),这个比較新,并且是使用 storyboard 的。...3、RAYWENDERLICH 上的 Internationalization Tutorial for iOS [2014 Edition] 这上面的文章都非常不错,非常值得一读,强烈推荐。...重点是要讲我在 github 上找到的一个类,很棒,优雅的代码一直感动到我眼泪哗哗直流~~ 这是github上的项目地址:HERE ,假设有找到很多其它更好的优秀代码,请知会一声。

    89900
    领券