"adjustsFontForContentSizeCategory iOS有什么替代方案?"

3

这个属性仅适用于iOS 10+操作系统,有没有替代方案来替换这个属性呢?

苹果官方文档(Objective C)

  @property(nonatomic) BOOL adjustsFontForContentSizeCategory;

Swift苹果文档

var adjustsFontForContentSizeCategory: Bool { get set }

当我们在低版本中打开应用时,此属性无法正常工作,导致应用崩溃。

2个回答

3

在低版本中,没有定义的属性,您需要通过编程来处理它,您需要监听系统通知以进行字体更改 - UIContentSizeCategoryDidChangeNotification

[[NSNotificationCenter defaultCenter] addObserver:self
      selector:@selector(didChangePreferredContentSize:)
          name:UIContentSizeCategoryDidChangeNotification
        object:nil];

Swift版本

NotificationCenter.default.addObserver(self, selector: 
#selector(self.didChangePreferredContentSize), name: 
UIContentSizeCategoryDidChangeNotification, object: nil)

您可以在选择器方法 - didChangePreferredContentSize 中处理您的需求。

最佳实践指南 - 当您离开您的视图控制器时,请记得删除观察者。


@kapsym 很高兴。 - Prashant

2
在Swift 3中,在iOS 10之前的版本中,为了使字体在用户更改其首选字体大小时更新,我们需要执行以下操作:
class ViewController: UIViewController {

    @IBOutlet weak var dynamicTextLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        dynamicTextLabel.font = .preferredFont(forTextStyle: .body)

        NotificationCenter.default.addObserver(forName: .UIContentSizeCategoryDidChange, object: nil, queue: .main) { [weak self] notification in
            self?.dynamicTextLabel.font = .preferredFont(forTextStyle: .body)
        }
    }

    deinit {
        NotificationCenter.default.removeObserver(self, name: .UIContentSizeCategoryDidChange, object: nil)
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接