[iOS]详解文本属性Attributes

[iOS]详解文本属性Attributes,第1张

每次需要特殊设置文本的attribute属性时,都要查很多资料,其中有些常用的key值有时不会那么准确的记住,所以花点时间整理了一下

使用下面这首古诗作为例子吧:

直接显示这首古诗的时候,结果是这样的:

下面,我们就一点点的添加文本的属性:

首先,创建一个NSMutableAttributedString:

这里的NSRange在下面的设置属性的时候要用到,就是你需要特殊添加属性的字符串,当然,这个字符串需要包含在整个字符串string里的当然,如果你需要为整个字符串添加属性,就不需要这个属性了,可以在创建添加属性:

调整字间距:

设置字体:

设置文本颜色:

设置段落样式:

设置文本背景色:

设置文本描边颜色,需要和NSStrokeWidthAttributeName设置描边宽度,这样就能使文字空心.

如果数值设置为负数,就没有空心字的效果:

添加删除线

添加下划线:

设置阴影

文本排版方式

在 iOS 中,总是使用横排文本,0 以外的值都未定义,即其他值无效果。

设置文本斜体

设置文本扁平化

以上便是常用的文本设置,以备使用时查找

如有不正确的地方,还请指正

下面,就开始为你的文本添加丰富的attributes吧!!!

attribute 是一个编译属性,用于向编译器描述特殊的标识、错误检查或高级优化。它是GNU C特色之一,系统中有许多地方使用到。 attribute 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute)等。

attribute 格式

其位置约束为:放于声明的尾部“;”之前。

函数属性可以帮助开发者把一些特性添加到函数声明中,从而可以使编译器在错误检查方面的功能更强大。

1. format

语法为 attribute ((format( NSString , F, A))),可以给被声明的函数加上类似printf或者scanf的特征,它可以使编译器检查函数声明和函数实际调用参数之间的格式化字符串是否匹配。format (archetype, m, n),第一个参数传递archetype指定为哪种类型,string-index指定格式化字符串的位置,n指定可变参数检查开始的位置。

在Objective-C 中通过使用 NSString 格式达到同样的效果,就像在 NSString +stringWithFormat: 和 NSLog() 里使用字符串格式一样

在使用NSLog函数进行输出时,如果我们传入的可变参数没有在格式化字符串中使用,编译器会提示警告,如下:

2.constructor与destructor

constructor属性可以指定函数在main函数执行之前进行调用,与之对应destructor可以指定某个函数在main函数执行结束之后再执行。这是一种非常强大的机制,在实际应用中也非常频繁,例如对以一个拥有模块化和路由功能的应用程序,可以通过这种方式来自动化的进行路由注册(无需手动调用),需要注意,constructor与destructor属性都可以设置一个优先级参数,优先级高的函数会先执行(0-100的优先级为系统保留)

3. unavailable

告诉编译器该方法不可用,如果强行调用编译器会提示错误。比如某个类在构造的时候不想直接通过init来初始化,只能通过特定的初始化方法()比如单例,就可以将init方法标记为unavailable

实际上unavailable后面可以跟参数,显示一些信息,如:

4.objc_root_class

表示这个类是一个根类(基类),比如NSObject,NSProxy.

5.overloadable

用于c语言函数,可以定义若干个函数名相同,但参数不同的方法,调用时编译器会自动根据参数选择函数原型:

6. objc_subclassing_restricted

指明当前类型不能有子类,相当于final关键字,语法为 attribute ((objc_subclassing_restricted))。例如:

7. objc_requires_super

表示子类重写当前类的方法时,必须要调用super函数,否则会有警告。语法为 __attribute__((objc_requires_super)) ,例如:

8.objc_designated_initializer

指定内部实现的初始化方法,系统宏NS_DESIGNATED_INITIALIZER展开即为该指令,语法为 __attribute__((objc_designated_initializer)) 。例如:

当一个类存在方法带有NS_DESIGNATED_INITIALIZER属性时,它的NS_DESIGNATED_INITIALIZER方法必须调用super的NS_DESIGNATED_INITIALIZER方法。它的其他方法(非NS_DESIGNATED_INITIALIZER)只能调用self的方法初始化。

http://fighting300.com/2016/06/12/iOS-attribute/

https://www.jianshu.com/p/965f6f903114

https://www.jianshu.com/p/29eb7b5c8b2d

https://cloud.tencent.com/developer/article/1622209


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

原文地址: http://outofmemory.cn/tougao/11250949.html

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

发表评论

登录后才能评论

评论列表(0条)

保存