traitCollection.preferredContentSizeCategory.isAccessibilityCategory для iOS 10
Следующий код прекрасно работает на iOS11, чтобы определить, установил ли пользователь LARGE FONT в своих настройках доступности.
Однако мне нужно поддерживать это и в iOS10. Как я могу сделать это?
Прямо сейчас код выглядит так:
if #available(iOS 11.0, *) {
if traitCollection.preferredContentSizeCategory.isAccessibilityCategory {
return UITableViewAutomaticDimension
} else {
return someSpecificHeight
}
} else {
// how to detect is isAccessibilityCategory on non-iOS11 devices?
// is there some ugly fallback I don't know about?
}
2 ответа
Хорошо, основываясь на ответе @Jefflovejapan, похоже, я могу сделать это:
let sizeCategory = traitCollection.preferredContentSizeCategory
if sizeCategory == .accessibilityMedium
|| sizeCategory == .accessibilityLarge
|| sizeCategory == .accessibilityExtraLarge
|| sizeCategory == .accessibilityExtraExtraLarge
|| sizeCategory == .accessibilityExtraExtraExtraLarge {
return UITableViewAutomaticDimension
} else {
return someSpecificHeight
}
Уродливо, но я думаю, что это делает трюк..
Я должен сделать все ==
сравнения, потому что это кажется единственным поддерживаемым оператором в iOS10 (все остальные, по-видимому, добавлены в iOS11)
Расширение ответа Джеффа. Я нашел более удобным добавить расширение к UITraitCollection. Надеюсь, это поможет любому разработчику iOS, которому все еще нужно разрабатывать для iOS 10 (печальные времена).
extension UITraitCollection {
var isAccessibleCategory: Bool {
if #available(iOS 11, *) {
return preferredContentSizeCategory.isAccessibilityCategory
} else {
switch preferredContentSizeCategory {
case .accessibilityExtraExtraExtraLarge,
.accessibilityExtraExtraLarge,
.accessibilityExtraLarge,
.accessibilityLarge,
.accessibilityMedium:
return true
default:
return false
}
}
}
}
Затем можно использовать так
return traitCollection.isAccessibleCategory ? UITableView.automaticDimension : someSpecificHeight
Похоже .accessibilityMedium
следующий размер по сравнению с .extraExtraExtraLarge
так что, возможно, это может быть вашим порогом.