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так что, возможно, это может быть вашим порогом.

Другие вопросы по тегам