当前位置: 首页 > news >正文

[iOS]中字体样式设置 API

今天项目需求里要求给文字设置字体样式, 以前的工作中并没有涉及字体样式的设置, 后来在网上找到了相关的方法, 这里总结一下.

CocoaUIKit 框架中为开发者提供了高层次的 API 以及方便的枚举、加载和使用字体。Cocoa Touch 使用 UIFont 类来封装字体。每个 iOS 设备都内置了系统字体。

01.Xib 或者 Storyboard

如果是在 Xib 或者 Storyboard 中你可以通过, 比如说 UILabel,你可以同过设置它的属性来直接设置字体样式:

  • 点击向右箭头会弹出2、3所示的弹窗

  • 点击font会有系统(System)和自定义(Custom)等选项

  • 如果你选择 System 默认就是苹方字体,此时你只能设置比如 regular、light、thin 等;但是如果你选择 Custom,就会弹出一大串字体名称供你选择,用什么就选什么,很方便。

02.代码中

如果你是在代码中设置文字字体,你就必须知道更多,请往下看。

字体被组织成字体族科(Families),每个族科又包含字样(Faces)。例如,Helvetica 是一个字体族科,Helvetica Bold是 Helvetica 族科中的一个字样。

要加载字体,你必须知道字体的字样(字体的名字),要知道字样,你必须知道它的族科。

怎么获取系统字体的族科呢,我们可以循环输出系统字体族科,使用 UIFont 类的familyNames 类方法,通过这个类方法得到字体族科名字然后用 UIFont 类的fontNamesForFamilyName: 类方法,传递 family name 作为参数,并返回一个字体名称的数组(array):

for(NSString *familyName in [UIFont familyNames]) {

    NSLog(@"Font FamilyName = %@",familyName); // 输出字体族科名字

    for(NSString*fontName in [UIFont fontNamesForFamilyName:familyName]){
    
        NSLog(@"\t%@",fontName); // 输出字体族科下字样名字
        
    }
}

复制代码

在 iOS 模拟器上运行代码,得到如下结果:

...

Font Family = Geeza Pro
GeezaPro
GeezaPro-Bold
Font Family = Helvetica Neue
HelveticaNeue-Italic
HelveticaNeue-Bold
...
复制代码

字体族科后面加-Bold 就是加粗, 加 -Oblique 就是倾斜等.

拿到字体族科和字样名称以后,你就可以直接使用代码设置文字的字样了。

如下 mouthLUILabel 的一个实例对象,可以使用 UIFontlabelfont 属性赋值,运行代码,你就会发现,字体神奇的发生了变化。

mouthL.font = [UIFont fontWithName:@"PingFangTC-Light" size:11];
复制代码

NewPan 的文章集合

下面这个链接是我所有文章的一个集合目录。这些文章凡是涉及实现的,每篇文章中都有 Github 地址,Github 上都有源码。

NewPan 的文章集合索引

如果你有问题,除了在文章最后留言,还可以在微博 @盼盼_HKbuy 上给我留言,以及访问我的 Github。

相关文章:

  • 20个Jquery表单插件
  • MAC上Git安装与GitHub基本使用
  • ORACLE -- RAC Debug 之路 CRS-0184错误与CRS初始化
  • chrome插件控制台
  • 英特尔研发神经元AI处理器,模仿大脑功能,无需训练数据集
  • android 里使用Socket进行发送消息案例
  • 进程间通信基础知识
  • 解决Please check that your locale settings
  • 15.4. 内容监控
  • 汇编语言笔记04-第一个程序
  • 阿里云聆听平台使用有感
  • 今晚测试了下微信的摇一摇传图
  • svn + 钉钉机器人制作简单的代码跟踪系统
  • 黑客惯用软件
  • winform命名规范
  • [数据结构]链表的实现在PHP中
  • 2019年如何成为全栈工程师?
  • centos安装java运行环境jdk+tomcat
  • Docker容器管理
  • extjs4学习之配置
  • IDEA 插件开发入门教程
  • laravel 用artisan创建自己的模板
  • node 版本过低
  • Object.assign方法不能实现深复制
  • Promise面试题2实现异步串行执行
  • VUE es6技巧写法(持续更新中~~~)
  • vue-cli3搭建项目
  • 爱情 北京女病人
  • 从零开始学习部署
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 排序算法之--选择排序
  • 如何优雅地使用 Sublime Text
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 我从编程教室毕业
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​Python 3 新特性:类型注解
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #define、const、typedef的差别
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (力扣)循环队列的实现与详解(C语言)
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (转)JAVA中的堆栈
  • (转)菜鸟学数据库(三)——存储过程
  • (转载)从 Java 代码到 Java 堆
  • .gitignore文件—git忽略文件
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET分布式缓存Memcached从入门到实战
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • ??myeclipse+tomcat