adjustsFontForContentSizeCategory iOS的替代方法是什么?

时间:2017-07-14 04:46:56

标签: ios objective-c swift

此属性仅适用于 iOS 10+操作系统什么是替换属性的替代解决方案。

Apple documentation for Objective C

  @property(nonatomic) BOOL adjustsFontForContentSizeCategory;

Apple documentation for Swift

var adjustsFontForContentSizeCategory: Bool { get set }

当我们在较低版本的应用程序中打开崩溃时,此属性在较低版本中不起作用。

2 个答案:

答案 0 :(得分:2)

在Swift 3中,在10之前的iOS版本中,为了在用户更改其首选字体大小时更新字体,我们必须执行以下操作:

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)
    }
}

答案 1 :(得分:2)

在较低版本中没有已定义的属性,您必须以编程方式处理它,您必须收听字体更改的系统通知 - 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。

最佳实践指南 - 离开视图控制器后,请务必删除观察者。