О чём не знает iPhone Air

1 мин. чтения

После презентации Apple решил узнать и добавить углы скругления экрана в ScreenLines для новых устройств. Установил XCode RC и начал заполнять таблицу.

Для определения радиуса используем значение скрытой переменной. При публикации в AppStore это нужно убрать, поэтому завернём в #if DEBUG, чтобы всё само сделалось.

extension UIScreen {
    static var current: UIScreen? {
        UIWindow.current?.screen
    }
    
    public var deviceCornerRadius: CGFloat {
        let model = UIDevice.current.type
        let radius = model.screenCornerRadius
        
        #if DEBUG
            let actualRadius = self.value(forKey: "_displayCornerRadius") as? CGFloat ?? 0
            print("Model: \(model), stored: \(radius), actual: \(actualRadius)")
        #endif

        return radius
    }
}

И получаем такие же углы, как и в iPhone 16 Pro

extension Model {
    var screenCornerRadius: CGFloat {
        switch self {
            //...
        case .iPhone16Pro, .iPhone16ProMax: 62.0

        case .iPhone17: 62.0
        case .iPhone17Pro: 62.0
        case .iPhone17ProMax: 62.0
        case .iPhoneAir: 62.0
            //...
        }
    }
    //...
}

Но запускаем приложение на симуляторе и видим, что углы обрезаны:

iPhone Air corners problem

Проверяем на iPhone 17, 17 Pro и 17 Pro Max — такой проблемы нет. Проблема симулятора? XCode Preview тоже срезает углы. Попробуем новый ConcentricRectangle, представленный в iOS 26, который сам подстраивается под родительский элемент?

Concentric rectangle проблему не решил

Проблема осталась (фон покрасил в зелёный чтобы лучше видеть линию и отличать от рамок устройства). Кстати, для iPhone 17 Pro и других устройств этот ConcentricRectangle работает на четыре с минусом (линия угла режется):

Concentric rectangle на 17 Pro

В итоге просто исправил таблицу вручную, проверив на каждом устройстве, а ConcentricRectangle убрал. Исправят ли проблему к официальному релизу iOS 26? Или на реальном iPhone Air всё будет по-другому?