SF Symbol imageView 不符合pointSize?

Posted

技术标签:

【中文标题】SF Symbol imageView 不符合pointSize?【英文标题】:SF Symbol imageView does not conform to pointSize? 【发布时间】:2020-04-14 20:43:16 【问题描述】:

我的故事板中有一个空的 UIImageView,并且在我的 ViewController.swift 文件中有插座。在 viewDidLoad 中,我调用了以下代码:

let config = UIImage.SymbolConfiguration(pointSize: 50, weight: .light)
self.symbol.image = UIImage(systemName: "calendar")
self.symbol.preferredSymbolConfiguration = config

符号加载良好,甚至重量也正确反映。

但是,即使我没有在 UIImageView 上设置任何约束,符号图像的大小仍然与情节提要中 UIImageView 的大小相关联。据我所知,在 SymbolConfiguration 中声明的 pointSize 对符号图像的大小没有影响。

据我所知,似乎有两种方法可以让 SF Symbols 中的 pointSize 起作用:1. 以编程方式完成所有操作,或者 2. 在 Storyboard / Inspector 中完成所有操作。

有谁知道我做错了什么或者 SF Symbols 不支持 Storyboard + 代码配置?

【问题讨论】:

@TylerTheCompiler 我刚刚想通了,你必须在设置配置后调用 sizeToFit() 。您可能认为 Apple 会为您调用它,但我猜他们让开发人员调用它是为了提高效率。 【参考方案1】:

我通过将UIImageView 对象的contentMode 属性更改为.center 解决了这个问题。

let imageView = UIImageView()

imageView.contentModel = .center // This is the key step.

imageView.preferredSymbolConfiguration = .init(pointSize: 10)
iconView.image = UIImage(systemName: "name")

【讨论】:

【参考方案2】:

我想通了,你必须在设置好配置后调用sizeToFit()。我猜 Apple 将其留给开发人员调用它,以便他们可以防止不必要地重新计算 UI 大小,从而潜在地提高效率。

反正解决方法是:设置好配置后在UIImageView上调用sizeToFit()

【讨论】:

【参考方案3】:

试试这个方法:

let config = UIImage.SymbolConfiguration(pointSize: 50, weight: .light)
self.symbol.image = UIImage(systemName: "calendar", withConfiguration: config)

【讨论】:

以上是关于SF Symbol imageView 不符合pointSize?的主要内容,如果未能解决你的问题,请参考以下文章

使用SF Symbol作为图像源时,UICollectionViewCell中的UIImageView随机改变帧

SF符号在约束下表现得很奇怪[重复]

SwiftUI - 如何在文本视图中更改自定义 SF 符号的颜色?

友盟分享和cocos2dx符合重复duplicate symbol 解决方案

如何在我的核心数据模型中使用 SF 符号? [关闭]

ImageView 超过父 android studio xml