Символ в строке изменен в iOS около 13,3 / XCode 11 / Swift - PullRequest
0 голосов
/ 01 мая 2020

Я использую символ-флажок в производном классе UITableViewCell. Метод init класса показан. Когда я обновил с iOS 12.0 до iOS 13.3, символ флажка изменился, как показывают изображения ниже (слева = iOS 12.0, справа = iOS 13.3). Символ не только изменил свой внешний вид, но и изменил его размер. Мой обходной путь можно найти в приведенном ниже коде.

Я удалил поддержку сцен в своем приложении iOS 13.3, если это как-то связано с проблемой.

Может кто-нибудь мне помочь понять что изменилось между версиями? Есть ли у вас рекомендации относительно того, как избежать подобных изменений в будущем при использовании символа?

iOS 12.0 iOS 13.3


override init(style: UITableViewCell.CellStyle, reuseIdentifier: String!) {

    super.init(style: style, reuseIdentifier: reuseIdentifier)

    checkboxButton = UIButton(type: .custom)

    // TODO: When drop support for pre iOS 13, #available can be removed as well as the 'else'
    var uncheckedSize: CGFloat
    var checkedSize: CGFloat
    if #available(iOS 13, *) {
        uncheckedSize = 32
        checkedSize = 25
    } else {
        uncheckedSize = 20
        checkedSize = 24
    }
    let unchecked = NSMutableAttributedString(string: "☐", attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: uncheckedSize)]);
    let checked = NSMutableAttributedString(string: "☑︎", attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: checkedSize)]);
    checkboxButton.setAttributedTitle(unchecked, for: .normal)
    checkboxButton.setAttributedTitle(checked, for: .selected)

    checkboxButton.setTitleColor(UIColor.black, for: .normal)
    checkboxButton.frame = CGRect(x: 0, y: 0, width: CGFloat(44), height: CGFloat(44))

    contentView.addSubview(checkboxButton)

    if #available(iOS 11.0, *) {
        let guide = contentView.safeAreaLayoutGuide // since iOS 11.0
        NSLayoutConstraint.useAndActivate([
            checkboxButton.leadingAnchor.constraint(equalTo: guide.leadingAnchor),
            checkboxButton.centerYAnchor.constraint(equalTo: contentView.centerYAnchor),
            checkboxButton.widthAnchor.constraint(equalToConstant: CGFloat(44)),
            checkboxButton.heightAnchor.constraint(equalToConstant: CGFloat(44))
            ])
    } else {
        NSLayoutConstraint.useAndActivate([
            checkboxButton.leadingAnchor.constraint(equalTo: self.leadingAnchor),
            checkboxButton.centerYAnchor.constraint(equalTo: contentView.centerYAnchor),
            checkboxButton.widthAnchor.constraint(equalToConstant: CGFloat(44)),
            checkboxButton.heightAnchor.constraint(equalToConstant: CGFloat(44))
            ])
    }
}

1 Ответ

1 голос
/ 01 мая 2020

iOS System Font изменено с 12 на 13.

Чтобы избежать подобных проблем в будущем:

  • используйте указанный c шрифт вместо системный шрифт
  • используйте растровое изображение c (png)
  • используйте пользовательский вид и нарисуйте его именно так, как вы хотите, чтобы он выглядел
...