Apakah mungkin untuk mengubah ketinggian UIPickerView? Beberapa aplikasi tampaknya memiliki PickerView yang lebih pendek tetapi pengaturan frame yang lebih kecil tampaknya tidak berhasil dan frame tersebut terkunci di Interface Builder.
ios
iphone
cocoa-touch
uikit
uipickerview
Steven Canfield
sumber
sumber
Jawaban:
Tampak jelas bahwa Apple tidak secara khusus mengundang penyia-nyiaan dengan tinggi default
UIPickerView
, tetapi saya telah menemukan bahwa Anda dapat mencapai perubahan ketinggian tampilan dengan mengambil kendali penuh dan meneruskan ukuran bingkai yang diinginkan pada waktu pembuatan, misalnya:smallerPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)];
Anda akan menemukan bahwa pada berbagai ketinggian dan lebar, terdapat gangguan visual. Jelas, gangguan ini perlu diselesaikan entah bagaimana, atau memilih ukuran lain yang tidak menunjukkannya.
sumber
Tak satu pun dari pendekatan di atas berfungsi di iOS 4.0
Tinggi pickerView tidak lagi dapat diubah ukurannya. Ada pesan yang dibuang ke konsol jika Anda mencoba mengubah bingkai alat pilih di 4.0:
Saya akhirnya melakukan sesuatu yang cukup radikal untuk mendapatkan efek picker yang lebih kecil yang berfungsi di OS 3.xx dan OS 4.0. Saya membiarkan alat pilih menjadi berapa pun ukuran yang diputuskan oleh SDK dan sebagai gantinya membuat jendela transparan tembus pandang pada gambar latar belakang saya di mana alat pilih tersebut menjadi terlihat. Kemudian cukup letakkan pemetik di belakang (Urutan Z) latar belakang UIImageView saya sehingga hanya sebagian pemetik yang terlihat yang ditentukan oleh jendela transparan di latar belakang saya.
sumber
Hanya ada tiga ketinggian yang valid untuk
UIPickerView (162.0, 180.0 and 216.0)
.Anda dapat menggunakan
CGAffineTransformMakeTranslation
danCGAffineTransformMakeScale
fungsi agar sesuai dengan alat pilih untuk kenyamanan Anda.Contoh:
Kode di atas mengubah ketinggian tampilan pemetik menjadi setengah dan memposisikan ulang ke posisi tepat (Kiri-x1, Atas-y1) .
sumber
Mencoba:
sumber
Di iOS 4.2 & 4.3 bekerja berikut:
Berikut ini tidak berhasil:
Saya memiliki aplikasi yang ada di toko aplikasi dengan pemilih tanggal 3 baris. Saya pikir perubahan tinggi mungkin telah dicegah karena Anda melihat teks di bawah batas pemilih tanggal, tetapi ini juga terjadi pada pemilih tanggal ketinggian normal 216.
Yang mana bugnya? Tebakanmu sama bagusnya dengan tebakanku.
Juga ada 3 ketinggian yang valid untuk
UIDatePicker
(danUIPickerView
) 162.0, 180.0, dan 216.0. Jika Anda menyetelUIPickerView
ketinggian ke hal lain, Anda akan melihat yang berikut di konsol saat melakukan debug pada perangkat iOS.sumber
Mulai iOS 9, Anda dapat dengan bebas mengubah
UIPickerView
lebar dan tinggi. Tidak perlu menggunakan peretasan transformasi yang disebutkan di atas.sumber
Saya telah menemukan bahwa Anda dapat mengedit ukuran UIPickerView - tidak dengan pembuat antarmuka. buka file .xib dengan editor teks dan setel ukuran tampilan pemilih sesuai keinginan Anda. Pembuat antarmuka tidak mengatur ulang ukuran dan tampaknya berfungsi. Saya yakin apel mengunci ukuran karena suatu alasan sehingga Anda harus bereksperimen dengan ukuran yang berbeda untuk melihat apa yang berhasil.
sumber
Keuntungan:
UIPickerView
berperilaku seperti seharusnyaUIViewController
viewWillLayoutSubviews
untuk mengubah skala / memposisikanUIPickerView
UIPopover
Kekurangan:
UIPickerView
pickerView viewForRow
untuk mengurungkan transformasi untuk subTampilanLarutan:
Subclass UIPickerView dan menimpa kedua metode menggunakan kode berikut. Ini menggabungkan subclassing, ketinggian tetap dan pendekatan transformasi.
sumber
Cara mudah untuk mengubah tinggi tampilan alat pilih adalah dengan menyematkan alat pilih dalam UIView, menyesuaikan tinggi tampilan induk dengan tinggi yang ingin Anda lihat dari alat pilih, lalu aktifkan "Klip Subview" di Interface Builder pada induk UIView atau diatur
view.clipsToBounds = true
dalam kode.sumber
Clip Subviews
. juga ukuranUIPickerView
harus lebih tinggi - dan Anda harus mengarahkan pusat AndaUIPickerView
agar terlihat di dalam orang tuaUIView
UIPickerView
dari kode).Saya tidak dapat mengikuti saran di atas.
Saya menonton banyak tutorial dan menemukan yang ini paling bermanfaat:
Saya menambahkan kode berikut untuk menyetel ketinggian baru di dalam metode "viewDidLoad", yang bekerja di aplikasi saya.
Semoga bermanfaat!
sumber
Ini telah banyak berubah di iOS 9 (di iOS 8 sangat mirip dengan apa yang kita lihat di sini). Jika Anda mampu menargetkan iOS 9 saja, maka Anda mengubah ukuran file
UIPickerView
sesuai keinginan Anda, dengan mengatur bingkainya. Baik!Ini dari Catatan Rilis iOS 9
sumber
Saya bekerja dengan ios 7, Xcode 5. Saya dapat menyesuaikan ketinggian pemilih tanggal secara tidak langsung dengan melampirkannya dalam tampilan. Ketinggian tampilan kontainer dapat disesuaikan.
sumber
Buat tampilan di IB atau kode. Tambahkan alat pilih Anda sebagai subview dari tampilan ini. Ubah ukuran tampilan. Ini paling mudah dilakukan di IB. Buat batasan dari tampilan ke tampilan supernya dan dari alat pilih ke tampilan baru ini.
Karena kurva Picker di sekitarnya tumpah ke atas dan bawah tampilan. Anda dapat melihat di IB ketika Anda menambahkan batasan atas dan bawah dari alat pilih ke tampilan itu menunjukkan ruang standar sekitar 16 poin di atas dan di bawah wadah superview. Setel tampilan ke klip jika Anda tidak menginginkan perilaku ini (peringatan buruk).
Inilah yang terlihat pada 96 poin tinggi pada iPhone 5. Alat pilih dengan spillover tingginya sekitar 130 poin. Sangat kurus!
Saya menggunakan ini dalam proyek saya untuk mencegah pemetik menyebar ke ketinggian yang tidak perlu. Teknik ini memotongnya dan memaksa tumpahan yang lebih erat. Ini sebenarnya terlihat lebih licin untuk menjadi sedikit lebih kompak.
Berikut gambar tampilan yang menunjukkan spillover.
Inilah batasan IB yang saya tambahkan.
sumber
Meskipun ukurannya tidak berubah, trik lain dapat membantu dalam situasi ketika UIPicker terletak di bagian bawah layar.
Seseorang dapat mencoba memindahkannya sedikit ke bawah, tetapi baris tengah harus tetap terlihat. Ini akan membantu mengungkapkan beberapa ruang di atas alat pilih karena baris bawah akan berada di luar layar.
Saya ulangi bahwa ini bukan cara mengubah ketinggian tampilan UIPicker tetapi beberapa ide tentang apa yang dapat Anda lakukan jika semua upaya lain gagal.
sumber
Ok, setelah berjuang lama dengan pickerview bodoh di iOS 4, saya memutuskan untuk mengubah kontrol saya menjadi tabel sederhana: berikut kodenya:
Ini adalah file .h untuk itu:
itu saja, sekarang satu-satunya yang tersisa adalah membuat variabel anggota dalam tampilan kotak kombo yang akan menampung pemilihan baris saat ini, dan kita siap melakukannya.
Nikmati semuanya.
sumber
Anda biasanya tidak dapat melakukannya di xib atau mengatur frame secara terprogram tetapi jika Anda membuka xib induknya sebagai sumber dan mengubah tinggi dari sana maka itu berfungsi. Klik kanan xib di mana pickerview berada, Cari pickerview dan Anda dapat menemukan tinggi, lebar, dll. di tag itu, Ubah tinggi di sana lalu simpan file.
sumber
Sejauh yang saya tahu, tidak mungkin mengecilkan UIPickerView. Saya juga belum pernah melihat yang lebih pendek digunakan di mana pun. Dugaan saya adalah bahwa itu adalah implementasi khusus jika mereka berhasil mengecilkannya.
sumber
Jika Anda ingin membuat picker Anda di IB, Anda dapat mengubah ukurannya ke ukuran yang lebih kecil. Periksa untuk memastikannya masih menggambar dengan benar, karena ada titik di mana itu terlihat mengerikan.
sumber
Swift : Anda perlu menambahkan subview dengan clip to bounds
Ini harus menambahkan pemilih tanggal 100 tinggi yang terpotong di bagian atas pengontrol tampilan.
sumber
Trik saya: gunakan layer mask datepicker untuk membuat datePicker beberapa bagian terlihat. seperti yang Anda lihat seperti mengubah bingkai datepicke.
sumber
Saya menggunakan lapisan topeng untuk mengubah ukuran tampilan itu
sumber
Sematkan dalam tampilan tumpukan. Stack view adalah komponen yang baru-baru ini ditambahkan oleh Apple di iOS SDK mereka untuk mencerminkan implementasi berbasis grid di pustaka front end berbasis web java script seperti bootstrap.
sumber
Seperti disebutkan di atas
UIPickerView
sekarang dapat diubah ukurannya. Saya hanya ingin menambahkan bahwa jika Anda ingin mengubah tinggi pickerView dalam sel tableView, saya tidak berhasil dengan mengatur jangkar ketinggian ke sebuah konstanta. Namun, penggunaanlessThanOrEqualToConstant
tampaknya berhasil.sumber
Setelah seharian menggaruk-garuk kepala, saya menemukan sesuatu yang cocok untuk saya. Kode di bawah ini akan membuat ulang UIDatePicker setiap kali pengguna mengubah orientasi telepon. Ini akan menghapus gangguan apa pun yang dimiliki UIDatePicker setelah perubahan orientasi.
Karena kita membuat ulang UIDatePicker, kita membutuhkan variabel instan yang akan menyimpan nilai tanggal yang dipilih. Kode di bawah diuji pada iOS 4.0.
sumber
Jika Anda ingin mengatur ukuran UiPickerView. Kode di atas pasti akan bekerja untuk Anda.
sumber
Di iOS 5.0, saya mendapatkan yang berikut ini untuk bekerja:
Ini membuat pemilih tanggal seperti yang digunakan Apple di aplikasi Kalender saat membuat acara baru dalam mode lanskap. (Tinggi 3 baris, bukan 5.) Ini tidak berfungsi ketika saya mengatur bingkai dalam
initWithFrame:
metode, tetapi sejauh ini berfungsi saat mengaturnya menggunakan metode terpisah.sumber
untuk iOS 5:
jika Anda melihat sekilas UIPickerView Protocol Referensi
Anda akan menemukan
Saya pikir ini yang pertama Anda cari
sumber
pickerView:rowHeightForComponent:
adalah metode delegasi untuk menentukan tinggi setiap baris - bukan ketinggian tampilan alat pilih.