← Назад к вопросам

Как узнать текущий scale экрана?

1.0 Junior🔥 141 комментариев
#UIKit и верстка

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как узнать текущий scale экрана на iOS?

На iOS текущий масштаб экрана (screen scale) можно определить, используя свойство scale у UIScreen. Это значение представляет собой отношение между пикселями (physical pixels) и точками (points) на устройстве. Например, на устройствах с Retina дисплеем scale обычно равен 2.0 или 3.0, что означает, что один point соответствует 2 или 3 физическим пикселям.

Основные методы получения scale экрана

1. Использование UIScreen.main.scale

Это основной и наиболее прямой способ получить текущий масштаб экрана.

import UIKit

let screenScale = UIScreen.main.scale
print("Текущий масштаб экрана: \(screenScale)")

Примечание: UIScreen.main может возвращать основной экран приложения. Для многократных экранов (например, на iPad с внешним дисплеем) можно использовать UIScreen.current (в iOS 16+) или другие методы.

2. Определение через UITraitCollection

Для более контекстно-зависимых случаев (например, внутри UIViewController или UIView), можно использовать UITraitCollection, который предоставляет информацию о текущей среде, включая масштаб экрана.

import UIKit

class MyViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let traitCollection = self.traitCollection
        let displayScale = traitCollection.displayScale
        print("Масштаб экрана через traitCollection: \(displayScale)")
    }
}

3. Использование window?.screen.scale

Если необходимо получить масштаб экрана, связанного с конкретным окном приложения, можно обратиться к свойству screen у UIWindow.

import UIKit

if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
    let windowScale = windowScene.windows.first?.screen.scale
    print("Масштаб экрана через window: \(windowScale ?? 0)")
}

Практическое применение масштаба экрана

Знание масштаба экрана критически важно для:

  • Обработки изображений: при работе с графикой необходимо учитывать scale для корректного рендеринга изображений без потери качества.
func loadImageForCurrentScale() {
    let scale = UIScreen.main.scale
    let imageName = scale > 2.0 ? "image@3x" : "image@2x"
    let image = UIImage(named: imageName)
    // Использование изображения с учетом масштаба
}
  • Адаптивного дизайна: для корректного расчета размеров элементов интерфейса в зависимости от плотности пикселей.
func adaptiveSize(for baseSize: CGFloat) -> CGFloat {
    let scale = UIScreen.main.scale
    return baseSize * scale
}
  • Оптимизации производительности: понимание масштаба помогает избежать избыточного использования ресурсов при рендеринге.

Важные аспекты и замечания

  • Масштаб может изменяться: на устройствах с поддержкой Dynamic Type или в многократных экранах масштаб может варьироваться. Поэтому важно использовать актуальные методы получения scale.
  • Не рекомендуется жесткая зависимость от конкретных значений масштаба: вместо этого следует использовать системы, адаптирующиеся к изменениям, например, Auto Layout и Size Classes.
  • Для проверки масштаба в SwiftUI можно использовать EnvironmentValues или напрямую обращаться к UIScreen, хотя SwiftUI больше ориентирован на абстрактные единицы измерения.
import SwiftUI

struct ContentView: View {
    @Environment(\.displayScale) var displayScale
    
    var body: some View {
        Text("Масштаб экрана: \(displayScale)")
            .padding()
    }
}

В итоге, scale экрана — это фундаментальная характеристика, которая влияет на визуальное представление и производительность приложения. Использование правильных методов его получения позволяет создавать более адаптивные и оптимизированные интерфейсы для разнообразных устройств iOS.

Как узнать текущий scale экрана? | PrepBro