3

以下代码在 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?
}
4

3 回答 3

2

好的,根据@Jefflovejapan 的回答,看起来我可以这样做:

 let sizeCategory = traitCollection.preferredContentSizeCategory

        if sizeCategory == .accessibilityMedium
     || sizeCategory == .accessibilityLarge
     || sizeCategory == .accessibilityExtraLarge
     || sizeCategory == .accessibilityExtraExtraLarge
     || sizeCategory == .accessibilityExtraExtraExtraLarge {
            return UITableViewAutomaticDimension
        } else {
            return someSpecificHeight
        }

丑陋,但我认为它的伎俩..

我必须做所有的==比较,因为这似乎是 iOS10 中唯一受支持的运算符(所有其他的显然是在 iOS11 中添加的)

于 2017-11-19T17:16:12.310 回答
2

扩展杰夫的答案。我发现向 UITraitCollection 添加扩展更简洁。希望这对仍然需要为 iOS 10 开发的任何 iOS 开发人员(悲伤的时代)有所帮助。

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
于 2020-01-02T11:47:13.123 回答
1

看起来 .accessibilityMedium是 的下一个尺寸,所以也许这.extraExtraExtraLarge可能是您的阈值。

于 2017-11-19T17:13:35.560 回答