Saya memiliki aplikasi yang memiliki bidang teks di bagian bawah tampilan. Ini berarti bahwa ketika saya pergi mengetik di bidang teks keyboard mencakup bidang teks.
Bagaimana cara saya memindahkan tampilan ke atas saat mengetik sehingga saya bisa melihat apa yang saya ketik dan kemudian memindahkannya kembali ke tempat semula ketika keyboard menghilang?
Saya sudah mencari di mana-mana tetapi semua solusi tampaknya berada di Obj-C yang saya belum bisa konversi dulu.
Bantuan apa pun akan sangat dihargai.
ios
swift
uikit
nsnotificationcenter
uikeyboard
Alex Catchpole
sumber
sumber
it is actually needed to scroll view up when keyboard appears
Jawaban:
Berikut ini solusinya, tanpa menangani peralihan dari satu TextField ke yang lain:
Untuk mengatasi ini, ganti dua fungsi
keyboardWillShow/Hide
dengan ini:EDIT UNTUK SWIFT 3.0:
EDIT UNTUK SWIFT 4.0:
EDIT UNTUK SWIFT 4.2:
sumber
UIKeyboardFrameEndUserInfoKey
daripadaUIKeyboardFrameBeginUserInfoKey
saat mendapatkan ukuran keyboard. Saya tidak yakin mengapa saat ini, tetapi yang pertama akan menghasilkan hasil yang lebih konsisten.UIKeyboardFrameBeginUserInfoKey
denganUIKeyboardFrameEndUserInfoKey
. Yang pertama memberi bingkai awal keyboard, yang kadang-kadang nol, sedangkan yang kedua memberikan bingkai ujung keyboard.Cara termudah yang bahkan tidak memerlukan kode apa pun:
Objek akan dipindahkan secara otomatis dengan keyboard, dalam sinkronisasi.
sumber
DispatchQueue.main.async {}
untuk memperbaikinya. Kerja bagus! Jempolan!Salah satu jawaban populer di utas ini menggunakan kode berikut:
Ada masalah nyata dengan mengimbangi tampilan Anda dengan jumlah statis. Ini akan terlihat bagus pada satu perangkat tetapi akan terlihat buruk pada konfigurasi ukuran lainnya. Anda harus mendapatkan ketinggian keyboard dan menggunakannya sebagai nilai offset Anda.
Berikut adalah solusi yang berfungsi di semua perangkat dan menangani kasus tepi di mana pengguna menyembunyikan bidang teks prediktif saat mengetik.
Larutan
Penting untuk dicatat di bawah ini, kami meneruskan self.view.window sebagai parameter objek kami. Ini akan memberi kami data dari Keyboard kami, seperti tingginya!
Kami akan membuatnya terlihat bagus di semua perangkat dan menangani kasus di mana pengguna menambahkan atau menghapus bidang teks prediktif.
Hapus Pengamat
Jangan lupa untuk menghapus pengamat Anda sebelum meninggalkan tampilan untuk mencegah pengiriman pesan yang tidak perlu.
Pembaruan berdasarkan pertanyaan dari komentar:
Jika Anda memiliki dua atau lebih bidang teks, Anda dapat memeriksa untuk melihat apakah view.frame.origin.y Anda nol.
sumber
Tambahkan ini ke viewcontroller Anda. Bekerja seperti pesona. Cukup sesuaikan nilainya.
sumber
Saya sedikit memperbaiki salah satu jawaban agar berfungsi dengan keyboard yang berbeda & tampilan teks / bidang yang berbeda pada satu halaman:
Tambahkan pengamat:
Hapus pengamat:
sumber
Bukan iklan atau promosi atau spam , hanya solusi yang bagus. Saya tahu bahwa pertanyaan ini memiliki hampir 30 jawaban dan saya sangat terkejut bahwa tidak seorang pun pernah menyebutkan tentang proyek GitHub yang indah ini yang melakukan semuanya untuk Anda dan bahkan lebih baik. Semua jawaban hanya memindahkan tampilan ke atas. Saya baru saja menyelesaikan semua masalah saya dengan Manajer IQKeyboard ini. Ini memiliki 13000+ bintang.
Cukup tambahkan ini di podfile Anda jika Anda menggunakan swift
dan kemudian di dalam AppDelegate.swift Anda lakukan
import IQKeyboardManagerSwift
Tambahkan baris
IQKeyboardManager.shared.enable = true
untuk mengaktifkannyaSolusi ini adalah suatu keharusan jika Anda akan berproduksi.
sumber
import IQKeyboardManager
dan digunakanIQKeyboardManager.shared().isEnabled = true
di AppDelegateUntuk Kesalahan Layar Hitam (Swift 4 & 4.2) .
Saya memperbaiki masalah layar hitam. Dalam solusi terverifikasi Ketinggian keyboard berubah setelah mengetuk dan ini menyebabkan layar hitam.
Harus menggunakan UIKeyboardFrameEndUserInfoKey alih-alih UIKeyboardFrameBeginUserInfoKey
sumber
Saya melihat semua jawaban menggerakkan tampilan itu sendiri dengan nilai ketinggian keyboard. Yah, saya punya jawaban yang rumit, yang bisa berguna jika Anda menggunakan kendala yaitu
autolayout
, yang menggerakkan tampilan dengan mengubah nilai kendala (misalnya batasan bawah atau atas) dengan nilai yang ditentukan sebelumnya atau Anda dapat menggunakan nilai ukuran keyboard.Dalam contoh ini, saya menggunakan batasan bawah dari bidang teks ke Tampilan Tata Letak Bawah dengan nilai awal 175.
sumber
Ada beberapa perubahan pada bagaimana kita mendefinisikan KeyboardWillHideNotification.
Solusi ini bekerja dengan Swift 4.2 :
sumber
Setelah 4-5 jam berjuang saya datang dengan ekstensi sederhana dari UIViewController dengan kode sederhana yang berfungsi seperti pesona
* Tampilan tidak boleh bergerak saat TextField berada di atas keyboard
* Tidak perlu menetapkan nilai konstan ke NSLayoutConstraint
* Tidak diperlukan perpustakaan pihak ketiga
* Tidak diperlukan kode animasi
* Bekerja pada tampilan tabel juga
* Ini berfungsi pada Auto layout / resize otomatis
Tambahkan Extension Of UIResponder ini untuk mendapatkan TextField yang dipilih
Kemudian gunakan ini di ViewController Anda
Daftarkan Notifikasi ini di
func viewWillAppear(_ animated: Bool)
Daftarkan Notifikasi ini di
func viewWillDisappear(_ animated:Bool)
Unduh Demo Di Sini
sumber
Untuk Swift 3, saya membuat subclass UIViewController karena saya membutuhkan perilaku konstan di semua View Controllers.
sumber
Jawaban yang divalidasi tidak memperhitungkan posisi textfield dan memiliki beberapa bug (perpindahan ganda, tidak pernah kembali ke posisi utama, perpindahan bahkan jika texfield berada di atas tampilan ...)
Idenya adalah:
maka kita akan dapat memindahkan tampilan hanya jika perlu dan perpindahan spesifik di untuk memiliki texField terfokus hanya di atas keyboard
Ini kodenya:
Cepat 4
}
sumber
Saya perhatikan bahwa jawaban lain melibatkan memotong beberapa bagian atas dari pandangan. Jika Anda ingin mengubah ukuran tampilan tanpa memotong konten apa pun, coba saja metode ini :)
sumber
Dua sen saya untuk pemula: dalam sampel di atas seseorang mengubah koordinat, penggunaan lainnya "topeng autoresizing", dan kendala lainnya:
Seperti kata Apple, jangan campur 3 tipe logika ini. Jika Anda memiliki kendala di Storyboard, jangan mencoba mengubah x / y. Ini pasti tidak berfungsi.
sumber
Jadi tidak ada jawaban lain yang tampaknya benar.
Keyboard Perilaku Baik di iOS harus:
Kode saya menggunakan yang
NSLayoutConstraint
dinyatakan sebagai@IBOutlet
Anda juga bisa menggunakan transformasi, tampilan offset, .... Saya pikir lebih mudah dengan kendala tho. Ini bekerja dengan menetapkan batasan ke bawah, Anda mungkin perlu mengubah kode jika konstanta Anda tidak 0 / Tidak ke bawah.
Ini kodenya:
sumber
100% Jawaban Sempurna Untuk Tinggi Pembaruan Tableview Semua Pria saat membuka Keyboard
Untuk Swift4.2
Swift3.2
sumber
Untuk Swift 3
sumber
Swift 4:
Saya mengalami masalah dengan jawaban yang paling diterima, di mana menyembunyikan keyboard tidak mengembalikan tampilan sepenuhnya ke bagian bawah halaman (hanya sebagian). Ini bekerja untuk saya (+ diperbarui untuk Swift 4).
sumber
Mirip dengan jawaban @Boris, tetapi di Swift 5 :
sumber
Inilah solusi saya (sebenarnya kode ini untuk kasus ketika Anda memiliki beberapa bidang teks dalam pandangan Anda, ini juga berfungsi untuk kasus ketika Anda memiliki satu bidang teks)
sumber
Diperbarui untuk Swift 3 ...
Seperti yang orang lain katakan, Anda perlu menambahkan pengamat pemberitahuan dalam metode viewDidLoad () pengontrol Anda, seperti:
Ingatlah untuk menghapus pengamat Anda jika perlu (saya melakukannya dalam metode viewWillDisappear ())
Lalu, terapkan metode acara dan sembunyikan Anda - perhatikan garis yang memberitahu aplikasi untuk mengabaikan acara interaksi (beginIgnoringInteractionEvents). Ini penting karena tanpa itu, pengguna dapat mengetuk bidang atau bahkan scrollview dan menyebabkan pergeseran terjadi untuk kedua kalinya, menghasilkan kesalahan UI yang mengerikan. Mengabaikan peristiwa interaksi sebelum keyboard menampilkan dan menyembunyikan akan mencegah hal ini:
Terakhir, aktifkan kembali interaksi pengguna (ingat, metode ini aktif setelah keyboard didShow atau didHide):
sumber
3 kode cepat
sumber
Jika Anda memiliki 2 atau lebih bidang teks pada VC yang sama, dan pengguna mengetuk salah satunya, lalu mengetuk yang lain, tanpa memanggil fungsi keyboardWillHide, tampilan akan naik sekali lagi, yang tidak perlu, karena tidak diperlukan, karena Anda akan memiliki keyboard, ruang kosong yang memiliki ketinggian keyboard, dan kemudian tampilan, menggunakan kode dalam jawaban yang saya edit:
Untuk mengatasi ini, ganti dua fungsi "KeyboardWillShow / Sembunyikan" untuk ini:
sumber
Solusi @ Boris SANGAT bagus tetapi pandangannya terkadang rusak.
Untuk perataan yang sempurna, gunakan kode di bawah ini
Fungsi:
Dan,
sumber
tutorial video ini adalah yang terbaik. 7 menit panjang dan itu akan sangat masuk akal. Solusi sederhana untuk ketika Anda memiliki beberapa bidang teks dan ingin tampilan gulir untuk memindahkan jumlah piksel "x" ketika bidang teks tertentu diketuk.
https://youtu.be/VuiPGJOEBH4
Hanya langkah-langkah ini:
-Tempatkan semua bidang teks Anda dalam tampilan gulir yang dibatasi ke tepi tampilan.
-Hubungkan semua bidang teks dan gulir tampilan sebagai delegasi ke pengontrol tampilan.
-Hubungkan Semua bidang teks dan gulir tampilan dengan IBOutlet.
-Tambahkan protokol UITextFieldDelegate ke kelas Anda
-Tambahkan metode UITextFieldDelegate ke file cepat Anda:
Metode pertama hanya mengaktifkan tombol kembali pada keyboard untuk mengabaikan keyboard. Yang kedua adalah ketika Anda memasuki bidang teks apa pun yang spesifik kemudian mengatur y offset dari seberapa jauh scrollview Anda bergulir (tambang didasarkan pada lokasi y pada pengontrol tampilan saya 25,57.112.142). Yang terakhir mengatakan ketika Anda menekan keyboard, scrollview kembali ke lokasi semula.
Saya membuat pixel view saya sempurna dengan cara ini!
sumber
Fitur ini seharusnya sudah dibangun di Ios, namun yang perlu kita lakukan secara eksternal.
Masukkan kode di bawah ini
* Untuk memindahkan tampilan ketika textField berada di bawah keyboard,
* Tidak untuk memindahkan tampilan ketika textField berada di atas keyboard
* Untuk memindahkan Lihat berdasarkan ketinggian keyboard saat diperlukan.
Ini berfungsi dan diuji dalam semua kasus.
| :: | Kadang-kadang Lihat akan turun, Dalam hal ini gunakan tinggi +/- 150:
sumber
itu harus lebih stabil
sumber
sumber
Gunakan kode berikut untuk melihat Up di UITextField diklik
sumber
Saya membuat cocoapod untuk menyederhanakan masalah:
https://github.com/xtrinch/KeyboardLayoutHelper
Bagaimana cara menggunakannya:
Buat batasan bawah tata letak otomatis, berikan kelas KeyboardLayoutConstraint dalam modul KeyboardLayoutHelper dan pod akan melakukan pekerjaan yang diperlukan untuk meningkatkannya untuk mengakomodasi keyboard yang muncul dan menghilang. Lihat contoh proyek tentang contoh cara menggunakannya (saya membuat dua: textFields di dalam scrollView, dan textFields yang berpusat secara vertikal dengan dua tampilan dasar - login & daftar).
Kendala tata letak bawah bisa dari tampilan wadah, textField itu sendiri, apa pun, apa saja.
sumber