gpt4 book ai didi

ios - 更改首选内容大小后,我的某些可重用单元格标签中的字体大小仍未更改

转载 作者:行者123 更新时间:2023-12-05 06:48:15 25 4
gpt4 key购买 nike

我正在使用具有包含 UICollectionViewListCells 的组合布局的 UICollectionView。每个单元格包含多个 UILabel。我使用自定义字体粗细设置动态类型

extension UIFont {
static func preferredFont(for style: TextStyle, weight: Weight) -> UIFont {
let metrics = UIFontMetrics(forTextStyle: style)
let desc = UIFontDescriptor.preferredFontDescriptor(withTextStyle: style)
let font = UIFont.systemFont(ofSize: desc.pointSize, weight: weight)
return metrics.scaledFont(for: font)
}
}

来源:https://mackarous.com/dev/2018/12/4/dynamic-type-at-any-font-weight

然后我更改字体大小:

enter image description here

当我滚动浏览我的 UICollectionView 时,一些单元格的字体大小保持不变,而大多数单元格的大小已正确调整(当使用像 UIFont.preferredFont(forTextStyle: .subheadline) 这样更简单的东西时,一切都完美无缺。什么是获得正确字体大小以响应首选内容大小变化的最佳方法?

此外,我正在创建一个包含 SF 符号的属性字符串 https://stackoverflow.com/a/58341241并使用

设置符号的大小
let configuration = UIImage.SymbolConfiguration(textStyle: .title1)

当我更改字体大小时,图像不会动态缩放。当我重新启动应用程序时,这两个问题都消失了。在 UIContentSizeCategory.didChangeNotification 发布时,是否有任何我可以执行的代码,或其他解决这两个问题的方法?

编辑我能够使用此处列出的方法解决问题的第一部分 https://spin.atomicobject.com/2018/02/02/swift-scaled-font-bold-italic/ .

extension UIFont {
func withTraits(traits:UIFontDescriptor.SymbolicTraits) -> UIFont {
let descriptor = fontDescriptor.withSymbolicTraits(traits)
return UIFont(descriptor: descriptor!, size: 0) //size 0 means keep the size as it is
}

func bold() -> UIFont {
return withTraits(traits: .traitBold)
}

}

let boldFont = UIFont.preferredFont(forTextStyle: .headline).bold()

我仍然坚持如何让属性字符串中的 sf 符号 UIImage 在首选内容大小更改时调整大小。

最佳答案

让属性字符串在首选内容大小更改时调整大小。

    func attributedStringDynamicTypeExample() {
let font = UIFont(name: "Times New Roman", size: 20)!
let fontMetrics = UIFontMetrics(forTextStyle: .title3)
let scaledFont = fontMetrics.scaledFont(for: font)

let attachment = NSTextAttachment()
attachment.image = UIImage(named: "BigPoppa")
attachment.adjustsImageSizeForAccessibilityContentSizeCategory = true

let attributes: [NSAttributedString.Key: Any] = [.font: scaledFont]
let attributedText = NSMutableAttributedString(string: "Your text here!", attributes: attributes)
attributedText.append(NSAttributedString(attachment: attachment))

label.adjustsFontForContentSizeCategory = true
label.attributedText = attributedText
}

就获取正确字体大小以响应首选内容大小变化的最佳方法而言,我更喜欢像这样覆盖 traitCollectionDidChange:

    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
guard previousTraitCollection?.preferredContentSizeCategory
!= traitCollection.preferredContentSizeCategory
else { return }
collectionView.collectionViewLayout.invalidateLayout()
}

但是使用通知应该同样有效:

NotificationCenter.default.addObserver(self,
selector: #selector(sizeCategoryDidChange),
name: UIContentSizeCategory.didChangeNotification,
object: nil)

@objc private func sizeCategoryDidChange() {
collectionView.collectionViewLayout.invalidateLayout()
}

关于ios - 更改首选内容大小后,我的某些可重用单元格标签中的字体大小仍未更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66848765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com