ios – 动态归因文本

ios – 动态归因文本,第1张

概述我不确定我的选择是做什么的: 红色的文本实际上将呈现红色并且也是动态的 – 长度将会改变. 我应该使用NSAttributedString并找出要应用属性的动态索引和长度吗? 或者是否可以在破折号之前将每个单词作为自己的标签? (我不确定是否可以在内联放置多个标签,并且每个标签随着尺寸的增加将其余部分向右推,有点像在HTML / CSS中的浮动效果) 最好的选择肯定是在一个标签中使用单个NSAtt 我不确定我的选择是做什么的:

红色的文本实际上将呈现红色并且也是动态的 – 长度将会改变.

我应该使用NSAttributedString并找出要应用属性的动态索引和长度吗?

或者是否可以在破折号之前将每个单词作为自己的标签? (我不确定是否可以在内联放置多个标签,并且每个标签随着尺寸的增加将其余部分向右推,有点像在HTML / CSS中的浮动效果)

解决方法 最好的选择肯定是在一个标签中使用单个NSAttributedString执行此 *** 作,因为您的其他选项是:

>使用多个标签,每次更改时更换框架,移动它们,确切地确定空间应该有多宽,确保它们对于屏幕或它们应该看到的视图不是太宽等等.正如你所看到的,这很快就会变得非常痛苦.
>查看顶部并使用UIWebVIEw,这对于显示单个标签显然有点过分,因为它为您提供了所有这些您不需要的令人惊奇的东西,如滚动和缩放以及JavaScript和东西,所有这些功能都使用cpu循环,无论你是否使用它们,所以这绝对不是一个非常好的选择性能,特别是如果你将有大量这些(例如在表视图中的每个单元格中)

然而,如果您使用单个字符串,您只需要正确计算属性的范围,将属性字符串分配给UILabel的attributedText(注意,仅限iOS 6,但根据您问题上的标记判断对您来说不是问题),你已经完成了.我目前在我的应用程序中广泛使用这种方法,并且它已经运行了一段时间(我确实尝试了其他两个,然后解决了这个问题,他们都非常痛苦地开始工作).

这是使用属性字符串执行此 *** 作的一个非常基本的示例:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10,50,300,50)];label.Font = [UIFont FontWithname:@"HelveticaNeue-light" size:16.0];[self.vIEw addSubvIEw:label];Nsstring *category = @"Socks";Nsstring *store = @"Apple Store";NSMutableAttributedString *string = [[NSMutableAttributedString alloc]                                       initWithString:[Nsstring stringWithFormat:                                       @"in %@ at %@ — 1 day ago",category,store]];[string addAttribute:NSForegroundcolorAttributename               value:[UIcolor redcolor]               range:[string.string rangeOfString:category]];[string addAttribute:NSForegroundcolorAttributename               value:[UIcolor redcolor]               range:[string.string rangeOfString:store]];label.attributedText = string;

请注意,如果例如store和category的值相同,则这将无法正常工作,因为rangeOfString:将查找给定字符串的第一个匹配项,这意味着类别字符串可能会突出显示两次,并且存储字符串一点也不.

更好的例子:这是一个稍微高级的例子,由于相同的字符串不会破坏,虽然增加了必须手动计算范围的麻烦:

Nsstring *in = @"in ";Nsstring *category = @"in";Nsstring *at = @" at ";Nsstring *store = @"in";Nsstring *text = [Nsstring stringWithFormat:@"%@%@%@%@ — 1 day ago",in,at,store];NSMutableAttributedString *string = [[NSMutableAttributedString alloc]                                      initWithString:text];[string addAttribute:NSForegroundcolorAttributename               value:[UIcolor redcolor]               range:NSMakeRange(in.length,category.length)];[string addAttribute:NSForegroundcolorAttributename               value:[UIcolor redcolor]               range:NSMakeRange(in.length + category.length + at.length,store.length)];

这种方式总是能正常工作,即使你的所有字符串都相同,但是代码稍微冗长,因为你必须手动计算要突出显示的范围(虽然这不是一个主要问题或很多代码绝对地说).

更新:只需添加一个使用粗体字体的简单示例,这样您就不必查找它:

[string addAttribute:NSFontAttributename               value:[UIFont FontWithname:@"HelveticaNeue-Bold" size:16.0]               range:NSMakeRange(in.length,category.length)];[string addAttribute:NSFontAttributename               value:[UIFont FontWithname:@"HelveticaNeue-Bold" size:16.0]               range:NSMakeRange(in.length + category.length + at.length,store.length)];

查看NSAttributedString UIKit Additions Reference以获取可添加到字符串的更多属性,以实现所需的效果.

总结

以上是内存溢出为你收集整理的ios – 动态归因文本全部内容,希望文章能够帮你解决ios – 动态归因文本所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1102555.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存