字符串中的符号更改为 iOS 大约 13.3 / XCode 11 / Swift
Symbol in string changed in iOS circa 13.3 / XCode 11 / Swift
我在派生的 UITableViewCell 中使用复选框符号 class。显示了 class 的 init 方法。当我从 iOS 12.0 升级到 iOS 13.3 时,复选框符号已更改,如下图所示(左 = iOS 12.0,右 = iOS 13.3)。符号不仅改变了外观,还改变了大小。您可以在下面的代码中看到我的解决方法。
我在 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))
])
}
}
iOS System Font
在 12 和 13 之间更改。
为避免将来出现此类问题:
- 使用特定字体而不是系统字体
- 使用位图图形 (png)
- 使用自定义视图并按照您想要的外观绘制它
我在派生的 UITableViewCell 中使用复选框符号 class。显示了 class 的 init 方法。当我从 iOS 12.0 升级到 iOS 13.3 时,复选框符号已更改,如下图所示(左 = iOS 12.0,右 = iOS 13.3)。符号不仅改变了外观,还改变了大小。您可以在下面的代码中看到我的解决方法。
我在 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))
])
}
}
iOS System Font
在 12 和 13 之间更改。
为避免将来出现此类问题:
- 使用特定字体而不是系统字体
- 使用位图图形 (png)
- 使用自定义视图并按照您想要的外观绘制它