• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 设置允许不同大小的应用程序范围的默认字体

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:38:27 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我希望我的应用程序中的所有文本都以 Oswald 字体显示。我已经看到了涉及 UILabel.appearance().font = yourFont 之类的出色答案。但是,据我所知,这需要使用 UIFont(name:_size:_) 构造字体,当然,它需要一个大小参数。这意味着应该具有不同大小的不同标签(例如字幕样式表格单元格中的标题和副标题文本)都以相同的大小显示。

是否有一种简单的方法可以为整个应用设置一次字体,并允许不同对象的大小为其标准大小?

补充问题: 1. UILabel.appearance().fontUITextView/UITextField 等价物是什么? UITextView.appearance().font 似乎不存在。 2. 在这些应用程序范围的语句中是否有办法也影响导航栏标题字体和表格部分标题字体等内容?



Best Answer-推荐答案


我找到了一个非常好的但不完全全面的解决方案。

我的大部分 View 都是一种或另一种表,所以我做了以下 (注意:我省略了 FontNames struct ,它包含一个获取粗体/斜体/浅色变化的功能。另外,非常感谢 https://stackoverflow.com/a/44921262/6826164 的 subview 功能。

extension UITableViewController {

open override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    for view in subviewsOf(view) {
        setFont(for: view)
    }
}

fileprivate func subviewsOf<T: UIView>(_ view: UIView) -> [T] {
    var subviews = [T]()

    for subview in view.subviews {
        subviews += subviewsOf(subview) as [T]

        if let subview = subview as? T {
            subviews.append(subview)
        }
    }
    return subviews
}

fileprivate func setFont(for view: UIView) {

    if let label = view as? UILabel {
        label.font = UIFont(name: FontNames.fontName(), size: label.font.pointSize)
    }
    else if let textField = view as? UITextField, let font = textField.font {
        textField.font = UIFont(name: FontNames.fontName(light: true), size: font.pointSize)
    }
    else if let textView = view as? UITextView, let font = textView.font {
        textView.font = UIFont(name: FontNames.fontName(light: true), size: font.pointSize)
    }
        // Technically this button font setting is unnecessary since the titleLabel will be covered as a UILabel in the view heirarchy,
        // but this allows a separate font for buttons if desired
    else if let button = view as? UIButton, let label = button.titleLabel {
        button.titleLabel!.font = UIFont(name: FontNames.fontName(), size: label.font.pointSize)
    }

}

}

当然,这里没有涵盖许多内容,包括:

  1. Navcon 标题
  2. 标签栏标题
  3. 章节索引标题
  4. 警报 Controller /操作表
  5. 显然,任何其他不是 Tables 的 VC。

关于更全面的任何想法/提示,包括我可能会遇到的其他具体观点,但这里没有说明(当然不包括总括 #5)?我已经尝试了评论中提到的解决方案,但都无法使它们中的任何一个都能像这个一样工作。

此外,除了 viewDidLayoutSubviews 之外,还有什么想法可以更好地放置它,因为那个是随机调用的?我试过把它放在 viewWillAppear 中,但由于某种原因这不起作用。

关于ios - 设置允许不同大小的应用程序范围的默认字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48371501/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap