JW
```
public
extension UIDevice {
var isPhoneX: Bool { screenType == .iPhones_X_XS_11Pro_12MiniSimulator }
...
var isDisplayZoomed: Bool { UIScreen.main.scale < UIScreen.main.nativeScale }
var iPhone: Bool { UIDevice.current.userInterfaceIdiom == .phone }
var iPad: Bool { UIDevice.current.userInterfaceIdiom == .pad }
enum ScreenType: String {
case iPhones_5_5s_5c_SE = "iPhone 5, iPhone 5s, iPhone 5c or iPhone SE"
...
case unknown
}
var screenType: ScreenType {
switch UIScreen.main.nativeBounds.height {
case 1136:
return .iPhones_5_5s_5c_SE
...
default:
return .unknown
}
}
func hasScreenTypes(_ types: [UIDevice.ScreenType]) -> Bool {
types.contains(screenType)
}
}
...
// Пример использования в констрейнтах
let
titleLabelTop: CGFloat = UIDevice.current.isPhoneSE ? Inset.single.rawValue : (UIDevice.current.isDisplayZoomed ? Inset.double.rawValue : Inset.triple.rawValue)
// Пример использования в выборе подходящего шрифта из общего списка
let
titleFont = FontBook.bold.of(style: UIDevice.current.isPhoneSE || UIDevice.current.isDisplayZoomed ? .title1 : .largeTitle)
```