LoginSignup
3
5

More than 5 years have passed since last update.

UITableViewCellのFontSizeはアクセシビリティの文字サイズの影響を受ける

Posted at

文字サイズ問題

デバッグ時に気がついたあれです。
CustomCellを使用せず、UITableViewCellをInitして使用している場合、UITableViewCellに含まれるtextLabelの文字がはみ出すことは、よっぽど長文を入れていない限りないはずです。

ただ、TableViewCellのLabelに長文が入るとなるとCell外にはみ出すことが起こります。
ましてや、アクセシビリティの文字サイズが大きい指定の時にはTableView外にはみ出すことも発生するでしょう。

(そもそも今回UITableViewCellのtextLabelの文字サイズがアクセシビリティと連動していると知らなかったので、その備忘録的な投稿です。単純かもしれませんが誰かの気付きになれば...)

ViewController.swift
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var dataTb: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        dataTb.delegate = self
        dataTb.dataSource = self

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

extension ViewController:UITableViewDelegate,UITableViewDataSource {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 6
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell:UITableViewCell = UITableViewCell()

        /**
         numberOfLinesを0に指定することで自動で改行されると思ったが
      改行されず、FontSize15のまま1行のみの表示になった
         */
        cell.textLabel?.font = UIFont.systemFont(ofSize: 15)        
        cell.textLabel?.numberOfLines = 0


        cell.textLabel?.text = "hogehoge"

        return cell
    }

}

上記のコードでは、textLabelの改行を無制限かつFontSizeを15Pointに指定しましたが横幅に対して調整が効かないので、結果1行表示になっています。
textLabelのFontSize自体は15Pointには指定できていますが、目的であるはみ出すことを回避することには繋がりませんでした。

解決方法

ViewController.swift
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var dataTb: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        dataTb.delegate = self
        dataTb.dataSource = self

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

extension ViewController:UITableViewDelegate,UITableViewDataSource {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 6
    }

    //セルの高さを見積もりさせる
    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableViewAutomaticDimension

    }
    //セルの高さを指定行に反映
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell:UITableViewCell = UITableViewCell()

        /**
         結果必要なのは、「adjustsFontSizeToFitWidth」をTrueに指定すること
         */
        cell.textLabel?.adjustsFontSizeToFitWidth = true

        /**
         また、この状態だと横幅に合わせたFontSizeで1行表示になるので
         改行を無限にする
         */
        cell.textLabel?.numberOfLines = 0

        /**
         アクセシビリティに影響されないFontSizeが必要であれば
         FontSizeの指定も行う
         */
        //cell.textLabel?.font = UIFont.systemFont(ofSize: 15)


        cell.textLabel?.text = "hogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehoge"

        return cell
    }

}

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5