2016-11-09 2 views
4

표준 UITableViewCell의 textLabel에서 adjustsFontForContentSizeCategory를 설정합니다. "Settings", "General", "Accessibility", "Larger Text"로 이동하여 글꼴 크기를 변경 한 다음 다시 내 응용 프로그램으로 돌아 가면 UITableViewCell의 UILabels가 그에 따라 변경됩니다. 그렇게해서는 안됩니다.iOS 10에서 adjustsFontForContentSizeCategory의 목적은 무엇입니까?

adjustsFontForContentSizeCategory의 목적은 정확히 무엇이며 UITableViewCells 레이블의 글꼴 크기 변경을 방지하려면 어떻게해야합니까?

답변

0

기본적으로 adjustsFontForContentSizeCategory UILabel의 글꼴 크기가 동적으로 변경됩니다.

5

표보기에 들어가기 전에 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 
}