Описание: Вопрос проверяет знание, как добиться тонкой линии в интерфейсе с учётом координатной системы points vs pixels.
Чтобы линия была в 1px, её толщину задают как 1 / UIScreen.main.scale points. Например, на экране с scale = 3 толщина будет 0.333... pt, что соответствует одному физическому пикселю.
Система координат:
1 pt может состоять из нескольких пикселей (scale – 2 или 3).
Вычисление толщины:
let onePixel = 1 / UIScreen.main.scale
let separator = UIView()
separator.backgroundColor = .lightGray
separator.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(separator)
NSLayoutConstraint.activate([
separator.heightAnchor.constraint(equalToConstant: onePixel),
separator.leadingAnchor.constraint(equalTo: view.leadingAnchor),
separator.trailingAnchor.constraint(equalTo: view.trailingAnchor),
separator.topAnchor.constraint(equalTo: view.topAnchor)
])Использование в SwiftUI:
Divider()
.frame(height: 1 / UIScreen.main.scale)
.background(Color.gray)Вывод:
Учёт UIScreen.main.scale гарантирует, что линия будет ровно в один пиксель на любом устройстве.