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, 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, 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.
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.
@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.
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.
// 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, 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.
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, 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şım | iOS Sürümü | Karmaşıklık | Öneri |
|---|---|---|---|
| Keyboard Notifications | iOS 3.0+ | Orta | Eski sürümleri desteklemek için |
| UIScrollView + contentInset | iOS 2.0+ | Düşük | Evrensel yaklaşım, Apple önerir |
| Keyboard Layout Guide | iOS 15+ | Minimum | Modern yaklaşım (iOS 15+) |
| IQKeyboardManager | iOS 8.0+ | Sıfır | Hı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.
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
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.
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, 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.
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.
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
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.
Ayrıca okuyun