표보기에 들어가기 전에 adjustsFontForContentSizeCategory
을 살펴 보겠습니다. 그 목적은 컨트롤이 자동으로 글꼴을 조정한다는 것입니다. 이 전에는 UIContentSizeCategoryDidChangeNotification
에 대한 관찰자를 수동으로 추가해야합니다.
따라서, 예를 들어, 스위프트 3, 아이폰 OS 버전 이전에 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)
}
}
아이폰 OS 10 년에 위의 단순화, 우리가 adjustsFontForContentSizeCategory
을 사용할 수 없습니다 관찰자가 더 이상 필요 : 말했다 된 것으로,
class ViewController: UIViewController {
@IBOutlet weak var dynamicTextLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
dynamicTextLabel.font = .preferredFont(forTextStyle: .body)
dynamicTextLabel.adjustsFontForContentSizeCategory = true
}
}
OK, 테이블 뷰는을 관찰자동으로. 텍스트 크기 조정이 표시되는지 여부는 동적 유형이 셀의 레이블에 사용되었는지 여부에 따라 달라집니다. 아래 같은 동적 텍스트를 사용하는 경우, 당신은 (adjustsFontForContentSizeCategory
를 사용하지 않고) 시스템의 기본 글꼴 크기 변경과 같은 테이블 업데이트를 볼 수 있습니다 :
class ViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
// make sure the cell resizes for the font with the following two lines
tableView.estimatedRowHeight = 44
tableView.rowHeight = UITableViewAutomaticDimension
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1000
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.font = .preferredFont(forTextStyle: .body)
// cell.textLabel?.adjustsFontForContentSizeCategory = true
cell.textLabel?.text = "Row \(indexPath.row)"
return cell
}
}
당신이 볼 수 있듯이, 내가 설정해야했던 유일한 일을 동적 텍스트의 글꼴 및 테이블이 자동으로 적절하게 업데이트됩니다. 내 경험에 의하면, 테이블 뷰에서 adjustsFontForContentSizeCategory
은 필요하지 않습니다 (테이블 뷰가 필요한 알림 자체를 준수해야하는 것처럼 보입니다). 자동 크기 조정 동작을 경험하지 않으면 언제든지 설정할 수 있습니다.
명시 적으로 테이블 뷰 셀의 레이블의 글꼴 그럼 그냥 동적 텍스트를 사용하지 않는, 변경하지 않으려면, 예컨대 :
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.font = .systemFont(ofSize: 17)
cell.textLabel?.text = "Row \(indexPath.row)"
return cell
}