Keyboard Avoidance — özü, uygulama yöntemleri ve arayüz kaydırma

Yazar: IT Sectr Yayınlanma: 2026-07-09 Okuma süresi: 9 dk

Keyboard Avoidance, sistem klavyesi göründüğünde iOS uygulama arayüzünü uyarlama tekniğidir ve klavye metin alanlarını ve diğer etkileşimli öğeleri kapatabilir. Bu mekanizma uygulanmazsa, kullanıcı ne yazdığını fiziksel olarak göremez, bu da hatalara ve kullanıcı deneyiminin bozulmasına yol açar. Apple Developer Documentation (2026)’ya göre, iOS 15’ten itibaren içerik kaydırmayı otomatik olarak yönetmek için UIScrollView’in UIScrollView.keyboardLayoutGuide ile birlikte kullanılması önerilir.

Anahtar Noktalar

  • Keyboard Avoidance — klavye göründüğünde içeriği yukarı kaydırarak aktif metin alanının görünür kalmasını sağlar.
  • UIKeyboardWillShowNotification ve UIKeyboardWillHideNotification, düzen uyarlaması için klavye boyutunu ve animasyonunu sağlar.
  • UIScrollView.keyboardLayoutGuide (iOS 15+), klavye görünürken ve gizlenirken kenar boşluklarını otomatik olarak yönetir.
  • IQKeyboardManager, manuel kod olmadan otomatik Keyboard Avoidance için popüler bir üçüncü taraf kütüphanesidir.
  • UITextFieldDelegate, hassas kaydırma yönetimi için düzenlemenin başlangıcını ve bitişini izlemeye olanak tanır.

Keyboard Avoidance Nedir

Keyboard Avoidance, iOS’ta sistem klavyesi göründüğünde etkin giriş alanının görünürlüğünü sağlayan teknikler bütünüdür. Temel sorun: klavye ekranın %50’sine kadarını kaplar ve metin alanları, gönderme düğmeleri ve diğer öğeler dahil olmak üzere arayüzün alt yarısını kapatır.

Uygulama için üç ana yaklaşım vardır: Keyboard Notifications aracılığıyla manuel yönetim (klasik yöntem, iOS 3.0’dan beri çalışır), otomatik kaydırmalı UIScrollView kullanımı (Apple tarafından önerilir) ve Keyboard Layout Guide (iOS 15+ ile modern yöntem). Seçim, desteklenen minimum iOS sürümüne ve arayüz karmaşıklığına bağlıdır.

Apple’a göre, Keyboard Avoidance eksikliği, metin alanları klavye tarafından tamamen kapatılmışsa, inceleme sırasında uygulama reddinin en yaygın nedenlerinden biridir. App Store Guidelines, tüm etkileşimli öğelerin etkin giriş sırasında erişilebilir kalmasını açıkça şart koşar.

iOS Neden Bunu Otomatik Yapmaz

iOS, arayüzün anlam bilgisini bilmediği için hangi öğenin görünür kalması gerektiğini otomatik olarak belirleyemez. Tek metin alanlı basit bir formda, tüm ekranı yukarı kaydırmak yeterlidir. Özel paneller, hareketli düğmeler ve birden çok bölüm içeren karmaşık bir arayüzde farklı davranış mantığı gerekir.

Ayrıca, bazı uygulamalar içeriği kasıtlı olarak kaydırmaz — örneğin, klavyenin çalışma alanının bir parçası olduğu klavye hesap makineleri veya düzenleyiciler. iOS kararı geliştiriciye bırakır ve her senaryo için esnek API’ler sağlar.

Klavye Çerçeve Bildirimleri

UIKeyboardWillShowNotification, iOS’un klavye görünmeden önce gönderdiği ana bildirimdir. UIResponder.keyboardFrameEndUserInfoKey sözlüğünde klavyenin son konumuyla bir CGRect ve UIResponder.keyboardAnimationDurationUserInfoKey içinde animasyon süresini içerir.

Bildirim işleyicisi, aktif metin alanı ile klavye arasındaki örtüşmeyi hesaplamalı ve ardından kabın alt kenar boşluğunu (contentInset veya frame) değiştirmelidir. Alan klavyenin üst kenarının altındaysa, içerik örtüşme miktarı kadar yukarı kayar. Klavye gizlendiğinde, kenar boşluğu orijinal değerine döner.

swift
@objc func keyboardWillShow(_ notification: Notification) {
    guard let keyboardFrame = notification
        .userInfo?[UIResponder.keyboardFrameEndUserInfoKey]
        as? CGRect else { return }
    
    let keyboardHeight = keyboardFrame.height
    scrollView.contentInset.bottom = keyboardHeight
    scrollView.verticalScrollIndicatorInsets.bottom = keyboardHeight
}

Bildirimleri kullanırken, animasyonu sistem klavyesiyle senkronize bir şekilde yönetmek önemlidir. iOS animasyon eğrisini (UIResponder.keyboardAnimationCurveUserInfoKey) ve süreyi sağlar. Bu parametrelerle UIView.animate kullanarak içeriğin klavyenin görünmesiyle aynı anda sorunsuz bir şekilde kaymasını sağlayın.

iOS 15+ içinde Keyboard Layout Guide

UIScrollView.keyboardLayoutGuide, iOS 15’te tanıtılan Keyboard Avoidance için modern bir API’dir. Klavyenin konumunu otomatik olarak izler ve arayüzün alt kısmını klavyenin üst kenarına bağlayan Auto Layout kısıtlamalarını günceller.

Kullanmak için, bir UIScrollView veya UIStackView üzerinde layout guide’ı etkinleştirin ve alt içerik kısıtlamasını ona bağlayın. Bildirimler, yükseklik hesaplama veya animasyonla hiçbir manuel çalışmaya gerek yoktur — sistem her şeyi otomatik olarak yapar, animasyonu klavyenin görünmesi ve gizlenmesiyle senkronize eder.

swift
// Keyboard Layout Guide’ı etkinleştir (iOS 15+)
scrollView.keyboardLayoutGuide.followsUndockedKeyboard = true

// Alt kısıtlamayı klavyenin üstüne sabitle
contentView.bottomAnchor.constraint(
    equalTo: scrollView.keyboardLayoutGuide.topAnchor
).isActive = true

followsUndockedKeyboard, kılavuzun alt kenardan ayrılabilen bir klavyeye (iPad’de) yanıt verip vermeyeceğini belirleyen bir özelliktir. Yalnızca arayüz hareketli klavyeyle doğru çalışıyorsa true olarak ayarlayın. iPhone için bu özellik yok sayılır — klavye her zaman alt kenara sabitlenmiştir.

UIScrollView ve Klavye

UIScrollView, Apple’ın Keyboard Avoidance için temel olarak kullanmayı önerdiği bir kaptır. Klavye göründüğünde, scroll view contentInset.bottom’unu artırarak içeriğin yukarı kaydırılmasına ve aktif alanın görünür olmasına olanak tanır.

Anahtar yöntem scrollRectToVisible’dır ve belirtilen dikdörtgenin (aktif metin alanı) görünür alana gelmesi için scroll view’ı programlı olarak kaydırır. contentInset değişikliğini bir scrollRectToVisible çağrısıyla birleştirmek, alanın yalnızca açığa çıkmakla kalmayıp aynı zamanda görünür alanın üst kısmında konumlandırılmasını da sağlar.

swift
func adjustScrollForKeyboard(
    keyboardHeight: CGFloat,
    activeField: UIView
) {
    scrollView.contentInset.bottom = keyboardHeight
    scrollView.verticalScrollIndicatorInsets.bottom = keyboardHeight
    
    var visibleRect = view.frame
    visibleRect.size.height -= keyboardHeight
    
    if activeField.frame.origin.y > visibleRect.maxY {
        scrollView.scrollRectToVisible(
            activeField.frame, animated: true
        )
    }
}

UITableView ile UIViewController için Apple, klavye göründüğünde contentInset’i otomatik olarak ayarlayan UITableViewController’ı kullanmayı önerir. Eklenen bir tabloyla UIViewController kullanıyorsanız, Keyboard Avoidance’ı manuel olarak uygulamanız gerekir — UITableViewController bu davranışı özel denetleyiciler için sağlamaz.

Auto Layout ve Keyboard Avoidance

Auto Layout, animasyonları programlamadan Keyboard Avoidance uygulamaya olanak tanır — belirli bir kısıtlamanın etkinliğini (isActive) değiştirin veya bir klavye bildirimine yanıt olarak sabitini güncelleyin.

Tip bir şema: scroll view veya içeriğin alt kenar boşluğu için bir IBOutlet NSLayoutConstraint oluşturun ve keyboardWillShow işleyicisinde constraint.constant = keyboardHeight olarak ayarlayın ve keyboardWillHide’da 0’a sıfırlayın. Sorunsuz bir geçiş için bir animate bloğu içinde layoutIfNeeded aracılığıyla düzeni güncelleyin.

YaklaşımiOS SürümüKarmaşıklıkÖneri
Keyboard NotificationsiOS 3.0+OrtaEski sürümleri desteklemek için
UIScrollView + contentInsetiOS 2.0+DüşükEvrensel yaklaşım, Apple önerir
Keyboard Layout GuideiOS 15+MinimumModern yaklaşım (iOS 15+)
IQKeyboardManageriOS 8.0+SıfırHızlı çözüm, popüler kütüphane

UIStackView kullanırken, alt kenar boşluğu kısıtlamalarını değiştirmek de işe yarar: yığın görünümü alt öğeleri otomatik olarak yeniden dağıtır. Ancak, yığın görünümü bir UIScrollView içindeyse, içindeki kısıtlamalar yerine scroll view’ın kendi contentInset’ini yönetmek tercih edilir.

Keyboard Avoidance için Üçüncü Taraf Çözümler

IQKeyboardManager, denetleyicide tek bir kod satırı olmadan otomatik Keyboard Avoidance uygulayan en popüler kütüphanedir (GitHub’da 16.000’den fazla yıldız). Metin alanlarını izlemek için method swizzling kullanır ve klavye göründüğünde içeriği otomatik olarak yukarı kaldırır.

Kütüphane esnek ayarlar sunar: alan ile klavye arasındaki mesafeyi belirleyebilir, belirli denetleyiciler için etkinleştirebilir/devre dışı bırakabilir ve UITextView ile özel giriş görünümleri için davranışı yapılandırabilirsiniz. Ancak, method swizzling diğer kütüphanelerle çakışabilir ve Apple, öngörülemeyen yan etkiler nedeniyle bu yaklaşımı üretim kodu için önermez.

Alternatifler arasında TPKeyboardAvoiding (hafif bir kütüphane, ~2.000 yıldız) ve topluluktan KeyboardManager bulunur. Modern projeler için Apple, iOS 15+ yerleşik araçlarını kullanmayı önerir ve daha düşük minimum sürümlü projeler için — en güvenilir yerleşik çözüm olan contentInset ile UIScrollView’i önerir.

Sıkça Sorulan Sorular

iOS’ta Keyboard Avoidance nedir?

Keyboard Avoidance, klavye göründüğünde arayüzü kaydırarak aktif metin alanının görünür kalmasını sağlayan bir tekniktir. Otomatik düzen uyarlaması için UIScrollView, Keyboard Notifications veya iOS 15+ Keyboard Layout Guide aracılığıyla uygulanır.

UIScrollView olmadan Keyboard Avoidance nasıl uygulanır?

Klavye göründüğünde ana görünümün frame’ini değiştirerek yüksekliğini klavye yüksekliği kadar azaltabilirsiniz. Bildirimin userInfo’sundaki parametrelerle bir animasyon bloğunda frame’i güncellemek için UIKeyboardWillShowNotification ve UIKeyboardWillHideNotification kullanın.

keyboardLayoutGuide nasıl çalışır?

keyboardLayoutGuide, bir UIScrollView’e (iOS 15+) eklenen bir UILayoutGuide’dir. Klavyenin üst kenarını otomatik olarak izler ve klavye görünürken ve gizlenirken NSLayoutConstraint’ini günceller, animasyonu sistem klavyesiyle senkronize eder.

Keyboard Avoidance için hangi üçüncü taraf kütüphaneler mevcut?

IQKeyboardManager en popüleridir, kod gerektirmez. TPKeyboardAvoiding hafif bir alternatiftir. Yeni projeler için, Apple’ın önermediği method swizzling kullanan üçüncü taraf kütüphaneler yerine iOS 15+ yerleşik araçları tercih edilir.

Belirli bir ekran için Keyboard Avoidance nasıl devre dışı bırakılır?

IQKeyboardManager kullanıyorsanız, belirli UIViewController için enabled = false çağrısı yapın. Manuel uygulama için, bu ekranda klavye bildirimlerine abone olmayın veya klavye göründüğünde contentInset’i sıfırlayın.

Özet

  • Keyboard Avoidance — metin girişi olan iOS uygulamaları için gerekli bir tekniktir, alanların klavye tarafından kapatılmasını önler.
  • UIKeyboardWillShowNotification ve UIKeyboardWillHideNotification — içerik kaydırmayı manuel yönetmek için klasik API.
  • UIScrollView contentInset ve scrollRectToVisible ile — Apple tarafından önerilen evrensel bir çözüm.
  • Keyboard Layout Guide (iOS 15+) — manuel bildirimler olmadan, Auto Layout kullanan modern yaklaşım.
  • Auto Layout kısıtlamaları bir animasyon bloğunda sabit güncellemesiyle sorunsuz içerik geçişi sağlar.
  • IQKeyboardManager — hızlı uygulama için popüler üçüncü taraf kütüphane, ancak method swizzling sınırlamalarıyla.
  • Apple önerir: iOS 15+ projeler için keyboardLayoutGuide ile UIScrollView, eski sürüm projeler için contentInset.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun