Notch — изрез в горната част на дисплея на iPhone, който съдържа предната камера, говорителя и сензорите Face ID. За първи път представен в iPhone X (2017), notch промени подхода към проектирането на мобилни интерфейси: областта на екрана около изреза се превърна в "мъртва зона" за съдържание. За адаптиране на интерфейса Apple въведе Safe Area — отстояния, гарантиращи, че съдържанието не се закрива от notch, заоблените ъгли и Home Indicator. В Android подобна концепция се реализира чрез safeAreaInsets в iOS и displayCutout + WindowInsets в Android.
Основни моменти
Notch (изрез, "вежда") — областта в горната част на екрана на смартфона, където са разположени предната камера, говорителя за разговори, сензорите за близост и осветеност, а за iPhone X и по-нови — инфрачервената камера Face ID, проекторът на точки и осветителят (TrueDepth camera система). Notch е въведен за увеличаване на полезната площ на екрана при запазване на всички необходими сензори — вместо горна рамка (bezel) дисплеят се разширява нагоре около изреза.
Размери: стандартният notch на iPhone има ширина ~34 mm (~209 pt в портретна ориентация за 6.1-инчови модели) и височина ~5 mm (~30 pt). Отстрани на notch остават "уши" (ears) — малки части от екрана отдясно и отляво на изреза. Дясното "ухо" обикновено показва часа, индикатора за батерия и Wi-Fi; лявото — оператора и статуса. В пейзажна ориентация iOS скрива notch с черна лента по цялата ширина на лентата за състояние — съдържанието не се показва в зоната на изреза.
Не само iPhone: концепцията notch беше заимствана от много производители на Android. Google Pixel 3 XL, OnePlus 6, Huawei P20, Xiaomi Mi 8 — всички имаха изрез. Някои производители отидоха по-далеч: "капковиден" изрез (waterdrop notch), punch-hole камера (отвор в екрана), плъзгаща се камера (изтеглящ се модул). Съвременните Android флагмани (Samsung Galaxy S23+, Google Pixel 8 Pro) използват punch-hole — минимален отвор за камерата в горната част на екрана, без широк изрез.
Safe Area — правоъгълна област вътре в view-то, която гарантирано не се закрива от системни елементи на интерфейса: notch, заоблени ъгли на екрана (corner radius), Home Indicator, лента с раздели (tab bar) и навигационна лента (navigation bar). Размерите на Safe Area се връщат чрез свойството UIView.safeAreaInsets — UIEdgeInsets със стойности top, left, bottom, right. За iPhone с notch горното отстояние = ~44 pt (портрет) или ~0 pt (пейзаж с черна лента).
// Използване на safeAreaInsets за позициониране на съдържание
class NotchAwareViewController: UIViewController {
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Четене на отстоянията на Safe Area
let safeArea = self.view.safeAreaInsets
// Логиране на стойности за отстраняване на грешки
print("Горно отстояние: \(safeArea.top)") // ~44 pt с notch
print("Долно отстояние: \(safeArea.bottom)") // ~34 pt с Home Indicator
// Позициониране на заглавие с оглед на Safe Area
titleLabel.frame = CGRect(
x: safeArea.left + 16,
y: safeArea.top + 16,
width: self.view.bounds.width - safeArea.left - safeArea.right - 32,
height: 44
)
}
// Обработка на промени в Safe Area (завъртане, Multi-Tasking)
override func viewSafeAreaInsetsDidChange() {
super.viewSafeAreaInsetsDidChange()
viewDidLayoutSubviews() // Преизчисляване на layout
}
}Auto Layout и Safe Area: в Interface Builder използвайте "Safe Area" като anchor цел вместо "Superview". За програмен layout използвайте safeAreaLayoutGuide: let guide = view.safeAreaLayoutGuide; titleLabel.topAnchor.constraint(equalTo: guide.topAnchor). iOS автоматично актуализира safeAreaInsets при завъртане на устройството, преминаване към Split View на iPad, показване/скриване на клавиатура и промяна на ориентацията. Всички стандартни UIKit контролери (UINavigationController, UITabBarController) вече вземат предвид Safe Area. Персонализирани view-та и контролери трябва изрично да използват safeAreaInsets.
DisplayCutout — клас на Android SDK, добавен в API 28 (Android 9.0), който описва областта на изреза на екрана. Може да се получи чрез WindowInsets.displayCutout(). Класът връща boundingBoxList — списък от правоъгълници, описващи изреза(ите), и safeInsetTop/safeInsetBottom/safeInsetLeft/safeInsetRight — минимални отстояния за безопасно показване на съдържание. Android поддържа различни конфигурации на изрези: централен (като iPhone), страничен (камера в ъгъла), двоен (две камери), punch-hole.
// Адаптиране на интерфейса към DisplayCutout в Activity
class NotchAwareActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Разрешаваме показване на съдържание в зоната на изреза (ако е необходимо)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
window.attributes.layoutInDisplayCutoutMode =
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
}
}
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
// Получаване на DisplayCutout чрез WindowInsets
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && hasFocus) {
val cutout = window.decorView.rootWindowInsets.displayCutout
val safeTop = cutout?.safeInsetTop ?: 0
// Задаване на отстояние за горното съдържание
headerView.updatePadding(top = safeTop)
}
}
}Режими на показване (layoutInDisplayCutoutMode): ALWAYS — съдържанието може да се показва в зоната на изреза (за full-screen приложения, видео, игри); NEVER — съдържанието никога не закрива изреза, системата добавя отстояние; SHORT_EDGES — съдържанието се показва в зоната на изреза само откъм късата страна (за портретни приложения с notch отгоре). Стандартен режим — SHORT_EDGES (от Android 12). За punch-hole камера изрезът е по-малък и много приложения използват ALWAYS за максимално използване на екрана.
iPhone X (2017) — първият смартфон на Apple с notch. Изрезът съдържаше TrueDepth камера за Face ID — система от инфрачервена камера, проектор на точки (Dot Projector) и осветител (Flood Illuminator). Размери на изреза: ~34 mm × 5 mm. В iOS 11 Apple представи Safe Area за адаптиране на приложения. Потребителите се разделиха: едни приеха notch като необходимост за Face ID, други го критикуваха за "съкратения" екран.
iPhone 13 (2021) — Apple намали notch с 20% чрез преместване на говорителя към горната рамка на екрана. Това беше последният класически notch. iPhone 14 и 14 Plus (2022) запазиха намаления notch. iPhone 14 Pro и Pro Max представиха Dynamic Island — елипсовиден изрез, обединяващ камерата и сензорите Face ID, който динамично променя формата си и показва системни известия (таймер, музика, свързване на AirPods). Dynamic Island се превърна в софтуерна платформа със собствен API (ActivityKit, Live Activities).
| Поколение | Тип изрез | Характеристики | Safe Area Top |
|---|---|---|---|
| iPhone X–XS (2017–2018) | Голям notch | Face ID, 34×5 mm | 44 pt |
| iPhone XR (2018) | Notch | Touch ID, по-малък notch | 44 pt |
| iPhone 11 (2019) | Notch | Face ID, широк изрез | 44 pt |
| iPhone 12 (2020) | Notch | Говорител преместен в рамката | 44 pt |
| iPhone 13 (2021) | Намален notch | С 20% по-малък | 44 pt |
| iPhone 14 / 14 Plus (2022) | Намален notch | Без Face ID (14 Plus) | 44 pt |
| iPhone 14 Pro (2022) | Dynamic Island | Адаптивен изрез | 54 pt |
| iPhone 15–16 (2023–2024) | Dynamic Island | ActivityKit, Live Activities | 54 pt |
Dynamic Island — не просто изрез, а интерактивен елемент на интерфейса. При свързване на AirPods островът се разширява, показвайки икона и статус. Повикване на такси (Uber) показва времето на пристигане. Таймерът се вижда в острова при минимизиране на приложението. Dynamic Island е достъпен на iPhone 14 Pro/Pro Max, iPhone 15/15 Pro/15 Pro Max, iPhone 16/16 Pro/16 Pro Max. Safe Area за Dynamic Island: горно отстояние = 54 pt (с 10 pt повече от класическия notch).
Никога не крийте съдържание зад notch — използвайте Safe Area или DisplayCutout за автоматично изчисляване на отстояния. Не задавайте фиксирани стойности на отстояния (напр. 44 pt) — те се различават на различните устройства и в различните ориентации. Винаги използвайте системни API за четене на Safe Area: safeAreaInsets в iOS, windowInsets.displayCutout в Android. Това гарантира коректно показване на всички устройства: iPhone SE (без notch), iPhone 14 Pro (notch), iPhone 15 (Dynamic Island), iPad (без notch, но с Home Indicator).
Пейзажна ориентация — особена рискова зона. На iPhone с notch в пейзаж iOS автоматично добавя черна лента по цялата ширина на лентата за състояние (съдържанието отляво и отдясно на notch не се показва). Това се прави чрез системно Safe Area inset = 0 top, но увеличени left/right insets (~47 pt). Не се опитвайте да изключите това поведение — App Store ще отхвърли приложението, използващо "забранени" зони на екрана за съдържание в пейзаж. За full-screen видео използвайте AVPlayerViewController, който автоматично поставя контролите извън зоната на notch.
| Правило | iOS | Android |
|---|---|---|
| API за отстояния | safeAreaInsets / safeAreaLayoutGuide | WindowInsets.displayCutout.safeInsetTop |
| Адаптация към завъртане | viewSafeAreaInsetsDidChange | onWindowFocusChanged |
| Full-screen режим | prefersStatusBarHidden = true | SYSTEM_UI_FLAG_FULLSCREEN |
| Съдържание на лентата за състояние | Автоматично в "ушите" до notch | Чрез layoutInDisplayCutoutMode |
| Пейзаж | Черна лента (автоматично) | Отстояния от WindowInsets |
| Видео/игри | AVPlayerViewController (безопасно) | LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS |
Фон и лента за състояние: ако използвате персонализиран цвят на фона, той трябва да запълва цялата област на екрана, включително зоната зад notch. Не рисувайте съдържание върху лентата за състояние — използвайте Safe Area. За тъмен режим се уверете, че лентата за състояние е четлива: задайте preferredStatusBarStyle според стила на вашия фон (.default за тъмен текст на светъл фон, .lightContent за светъл текст на тъмен фон).
Симулатори и емулатори: Xcode предоставя симулатори на всички модели iPhone с notch (iPhone X–14) и Dynamic Island (iPhone 14 Pro–15). Android Studio предоставя емулатори с различни конфигурации на изрези (Google Pixel 3 XL, персонализиран емулатор с cutout). Тествайте в портретна и пейзажна ориентация, с клавиатура и без, в Split View (iPad). Проверете дали цялото съдържание е четливо и незакрито.
Реални устройства: notch на симулатор и на реално устройство може да се различава. Например симулаторът iPhone 14 Pro показва Dynamic Island, но без реална интерактивност (Live Activities). В Android punch-hole камерата може да не се емулира точно. Най-добрият начин е тестване на реални устройства. Минимален набор: iPhone SE (без notch), iPhone 14 (notch), iPhone 15 Pro (Dynamic Island), Android с punch-hole, Android с waterfall екран (Samsung Edge).
Инструменти: за iOS използвайте Xcode View Debugger с опция "Show Safe Area Insets" — визуално ще покаже границите на Safe Area. За Android — Layout Inspector в Android Studio, показващ WindowInsets и DisplayCutout в панела Attributes. Също така Accessibility Inspector е полезен за проверка дали всички елементи в Safe Area са достъпни за VoiceOver/TalkBack. Не забравяйте за iPad без notch, но с Home Indicator (долно отстояние ~21 pt) и заоблени ъгли.
Често задавани въпроси
За iPhone с notch (X–14) в портретна ориентация: top = 44 pt, left = 0, right = 0, bottom = 34 pt (Home Indicator). За iPhone с Dynamic Island (14 Pro–16): top = 54 pt, bottom = 34 pt. За iPhone SE (без notch): top = 20 pt (лента за състояние), bottom = 0 pt (ако няма Home Indicator) или 21 pt (за модели с Home Indicator). В пейзаж: top = 0, left = 47 pt, right = 47 pt, bottom = 21 pt.
Notch — статичен изрез за камерата и сензорите Face ID. Dynamic Island — софтуерно-хардуерен елемент, променящ формата си и показващ известия, таймери, Live Activities. Dynamic Island е достъпен на iPhone 14 Pro и по-нови. Safe Area за Dynamic Island е по-голяма (top = 54 pt vs 44 pt за notch). Dynamic Island поддържа API ActivityKit за външни разработчици.
В Android отстоянието под DisplayCutout се получава чрез WindowInsets. Извикване: decorView.rootWindowInsets.displayCutout?.safeInsetTop. За API 28+ (Android 9). Режимът на показване се управлява чрез window.attributes.layoutInDisplayCutoutMode: NEVER (отстояние), SHORT_EDGES (отстояние откъм късата страна), ALWAYS (без отстояние). За punch-hole камера safeInsetTop е равен на височината на лентата за състояние (~24 dp).
В пейзажна ориентация iOS автоматично добавя черни ленти отстрани на екрана, за да не се показва съдържание в зоната на изреза. Това е системно поведение, регулирано от Safe Area insets (left/right ~47 pt). Причина: в пейзаж "ушите" отстрани на notch са твърде малки за показване на полезно съдържание. За full-screen приложения (видео, игри) може да се използва AVPlayerViewController с автоматично управление на плейъра.
Да, използването на Safe Area е задължително за всички приложения, публикувани в App Store. Apple проверява това при ревю: ако съдържанието е закрито от notch, заоблени ъгли или Home Indicator, приложението се отхвърля. В Android препоръката е: използвайте WindowInsets за адаптация под изреза. От Android 12 режимът SHORT_EDGES е стандартен и системата автоматично добавя отстояния под изреза за приложения, които не използват персонализирани layout-ове.
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също