Как получить черную статусную строку на iPhone X на iOS 11
По умолчанию панель состояния на iPhone X выглядит так:
![enter image description here]()
Но я хотел бы добиться этого:
![enter image description here]()
Я попробовал установить preferredStatusBarStyle
для lightContent
но он работал только после установки фона позади строки состояния на черный.
Чтобы исправить закругленные углы, я закончил тем, что добавил еще одну подзубровку с закругленными углами.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .black
let roundedView = UIView(
frame: CGRect(
x: 0,
y: UIApplication.shared.statusBarFrame.height,
width: view.frame.width,
height: view.frame.height
)
)
roundedView.layer.cornerRadius = 10
roundedView.layer.masksToBounds = true
roundedView.backgroundColor = .white
view.addSubview(roundedView)
let label = UILabel(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 60))
label.text = "Black statusbar!"
label.textAlignment = .center
roundedView.addSubview(label)
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
Мне интересно, лучший ли это подход. Должен быть лучший способ добиться этого.
ОБНОВИТЬ
Это ужасная идея, потому что:
- Как отмечает @Moritz, руководство Apple прямо запрещает это:
Не маскируйте и не обращайте особое внимание на функции отображения клавиш. Не пытайтесь скрыть устройство округлыми углами, корпусом датчика или индикатором для доступа к главному экрану, поместив черные полосы вверху и внизу экрана. Не используйте визуальные украшения, такие как скобки, рамки, фигуры или учебный текст, чтобы обратить особое внимание на эти области.
-
Округлые углы в верхней части представления могут выглядеть красиво, но вам придется добавлять исключения в код, чтобы убедиться, что закругленные углы не показаны на других iPhone. Вам нужно будет поместить это во все ваши ViewControllers/Storyboards.. Это не так здорово.
-
Округленные углы в нижней части изображения будут отображаться прямо на скриншотах, но углы наверху (заданные вручную) не будут. Это будет некрасиво, если пользователи делят ваше приложение.
Ответы
Ответ 1
Макет безопасной области - это решение вашей проблемы.
Я попытался выполнить решение в моих существующих проектах, и он отлично работает.
- Установите черный цвет фона (или то, что вы хотите) на главный вид вашего контроллера.
- Теперь добавьте дочерний вид (с белым фоном) и установите его ограничения относительно плана безопасной зоны (или следуйте руководству по началу и внизу макета, если версия Xcode ниже 9).
- Рассмотрим этот вид ребенка (с белым фоном) в качестве основного вида и обработайте его с последующим дизайном.
Вот пример моментального снимка с результатом. Включив или отключив макет Safe Area, я тестировал и реализовывал.
FYI: в этих моментальных снимках основной вид имеет красный фон, а дочерний вид имеет синий цвет фона.
Схема безопасного расположения: ![enter image description here]()
AutoLayout
![enter image description here]()