Saya baru saja menonton video WWDC # 216, "Membangun UI Adaptif dengan UIKit".
Sekitar 45:10 Tony Ricciardi berbicara tentang perubahan IB di Xcode 6 untuk mendukung perubahan baru.
Dia mengatakan "Anda dapat menerapkan dokumen ini mundur ke versi iOS yang lebih lama".
(di mana "Dokumen-dokumen ini" mungkin berarti XIB dan papan cerita yang memiliki pengaturan khusus untuk kelas ukuran yang berbeda.)
Saya tidak mengada-ada. Pergi menonton video WWDC.
Bagaimana mungkin? Koleksi sifat dan kelas ukuran hanya ditentukan di iOS 8. Bagaimana perilaku runtime yang bergantung pada konstruksi UI yang baru untuk iOS 8 bekerja di versi iOS sebelumnya?
Jika ini mungkin itu akan menjadi indah. Anda dapat membuat aplikasi yang akan berjalan di iOS 6, 7, dan 8, dan memanfaatkan kemampuan tata letak UI baru yang fleksibel yang telah ditambahkan Apple ke Xcode 6. Saya telah membuat sendiri logika UI adaptif dalam kode, dan itu cukup banyak pekerjaan.
sumber
Jawaban:
Perubahan yang dibuat pada UI dengan Kelas Ukuran di Interface Builder DO muncul dengan benar di perangkat iOS 7 dan Pratinjau di Xcode. Misalnya, saya mengubah beberapa batasan Tata Letak Otomatis dan ukuran font untuk Tinggi reguler Lebar reguler dan batasan yang diubah itu terlihat di Simulator iPad yang menjalankan iOS 7.0.
Semua pengoptimalan kelas ukuran tersedia untuk iOS 7, kecuali kelas ukuran yang memiliki Tinggi Ringkas. Ini telah dikonfirmasi oleh Apple dan sekarang dinyatakan langsung dalam dokumentasi :
Untuk aplikasi yang mendukung versi iOS sebelum iOS 8, sebagian besar kelas ukuran kompatibel dengan versi sebelumnya.
Kelas ukuran kompatibel ke belakang jika:
- Aplikasi dibuat menggunakan Xcode versi 6 atau yang lebih baru
- Target penerapan aplikasi lebih lama dari iOS 8
- Kelas ukuran ditentukan di papan cerita atau xib
- Nilai komponen tinggi tidak kompak
Karena iOS 7 tidak menghormati beberapa kelas ukuran, jika Anda menggunakannya, Anda akan mengalami masalah. Sebagai contoh: Ketika Anda memiliki Compact w Any h ditentukan dan kemudian Compact w Compact h ditentukan, di iOS 7 itu akan menghormati Compact w Any h tetapi di iOS 8 itu membuat tampilan Compact w Compact h.
Jadi, jika Anda ingin menggunakan dua kelas ukuran tersebut dan mempertahankan kompatibilitas dengan iOS 7, saya akan melakukan pengoptimalan apa pun yang Anda inginkan untuk iPhone dalam lanskap di Any w Any h atau Compact w Any h, lalu lakukan pengoptimalan lainnya untuk kelas ukuran yang berbeda. seperlunya, dan dengan begitu Anda tidak perlu menggunakan kelas ukuran apa pun dengan tinggi yang ringkas dan akan menghindari masalah.
sumber
Compact-Compact
tidak diekspor untuk iOS 7;Compact-Regular
adalah. Lihat jawaban saya untuk lebih jelasnya.Saat menerapkan aplikasi Anda ke iOS 7, Xcode akan menyusun storyboard Anda dengan dua cara berbeda:
Untuk iPhone, storyboard Anda akan dikompilasi sebagai "Compact-Regular" (Lebar kompak, tinggi reguler), dan ini akan dikemas sebagai ujung "~ iphone" Anda.
Untuk iPad, storyboard Anda akan dikompilasi sebagai "Reguler-Reguler" dan dikemas sebagai ujung "~ ipad" Anda.
Jadi jika Anda ingin menerapkan ke iOS 7 dan iOS 8, Anda harus memfokuskan desain Anda pada kelas ukuran Compact-Any dan Regular-Any. Itu akan memberi Anda pengalaman terbaik dalam hal mencocokkan UI di seluruh target penerapan. Anda, tentu saja, dipersilakan untuk mengubah tata letak untuk kelas ukuran lain, tetapi kecuali modifikasi tersebut akan diterapkan ke kelas ukuran Compact-Regular atau Regular-Regular, Anda tidak akan melihat modifikasi tersebut di iOS 7.
sumber
Catatan: Jawaban ini relevan dengan versi beta dari Xcode 6 dan tidak lagi berlaku untuk versi pengiriman. Lihat jawaban dari Joey dan Dave DeLong di halaman ini untuk informasi yang benar.
(jawaban asli dipertahankan di bawah):
Sementara
Storyboards/XIBs
dikonfigurasi untuk menggunakan kelas ukuran akan dijalankaniOS 7
, OS saat ini tidak menghormati itusize classes
dan tampaknya menggunakan kelas ukuran default 'Any / Any'.Saya setuju bahwa slide tertentu yang Anda maksud tampaknya menjanjikan kompatibilitas seperti itu, tetapi tampaknya tidak demikian saat ini
(Xcode 6 beta 2)
.Untuk mengujinya, saya membuat sebuah proyek
(iOS 8 SDK, deployment target of 7.1)
dengan satu tombol yang berpusatvertically and horizontally
di kelas ukuran Any / Any, tetapi sejajar dengan sudut kiri atas di kelas ukuran Compact / Compact (misalnya iPhone dalam lanskap). Asisten Pratinjau Xcode menunjukkan bahwa tombol berubah posisinyaiOS 8
, tetapi tidakiOS 7
. Saya juga mengonfirmasi perilaku ini diiOS 7
perangkat.sumber
Karena beberapa jawaban dan komentar membahas sifat kompatibilitas mundur, saya pikir saya akan membagikan kutipan langsung dari Dokumentasi Apple :
~~~~~
Menerapkan Aplikasi Dengan Kelas Ukuran pada Versi iOS Sebelumnya
Untuk aplikasi yang mendukung versi iOS sebelum iOS 8, sebagian besar kelas ukuran kompatibel dengan versi sebelumnya.
Kelas ukuran kompatibel ke belakang jika:
~~~~~
Poin terakhir itu ditargetkan pada diskusi ini, di mana Apple mengonfirmasi bahwa selama "tinggi kompak" tidak digunakan , Apple harus mempertahankan kompatibilitas ke belakang.
Semoga ini bisa membantu seseorang!
sumber
Saat menangani masalah serupa, saya menemukan jawaban lain yang belum saya lihat di sini. Sepertinya Kelas Ukuran dalam
XIB
file tidak berfungsi sama sekali. Jika saya membuat prototipe sel distoryboard
file, itu berfungsi di iOS7 seperti yang dijelaskan dalam jawaban lain, namun ketika sel prototipe yang sama dipindahkan keXIB
kelas ukuran file terpisah diabaikan di iOS7.Berikut ini tautan ke proyek contoh yang mendemonstrasikan perilaku ini: https://dl.dropboxusercontent.com/u/6402890/testSizeClasses.zip
Di sel prototipe saya memiliki empat batasan dari setiap tepi tampilan abu-abu. Masing-masing dikonfigurasi dengan cara yang sama: Apa saja / Apa saja - 10, Reguler / Reguler - 20
Ini berfungsi dengan baik di simulator iOS8 untuk XIB dan Storyboard, dan di iOS7 hanya sel yang ditentukan di Storyboard yang mendapat pembaruan batasan di iPad:
sumber
Jika itu menghemat waktu siapa pun, saya percaya bahwa cara Xcode 6 menyediakan kompatibilitas semu mundur untuk kelas ukuran adalah melalui storyboard historis
~ipad
dan~iphone
sufiks, dan tidak lebih. Ini masuk akal karena kelas ukuran adalah cara yang lebih abstrak tentang bagaimana kita sebelumnya mendefinisikan papan cerita iPad, dan papan cerita iPhone.Karena itu:
Jika tujuan Anda adalah menggunakan kelas ukuran untuk mendukung tata letak khusus keluarga perangkat (iPad vs. iPhone), maka Anda beruntung: kelas ukuran adalah antarmuka yang lebih bagus untuk metode yang didukung sebelumnya.
Jika tujuan Anda adalah menggunakan kelas ukuran untuk mendukung tata letak yang diubah untuk model yang berbeda dalam keluarga perangkat yang sama - mis. iPhone 5/6/6 + inc. lanskap, maka Anda kurang beruntung . Menggunakan ini akan membutuhkan target penerapan iOS 8 minimum.
sumber
@lducool - Dalam pembuat antarmuka, di inspektur Identitas, ubah 'Dibuat Untuk' ke iOS7.1 dan yang lebih baru.
sumber
Sayangnya jawaban dari Dave dan Joey tidak berhasil untuk saya. Saya tidak diizinkan berkomentar di utas ini, jadi maafkan saya jika ini adalah tempat yang salah.
Saya telah membuat pertanyaan khusus untuk itu: Contoh untuk UI adaptif lanskap potret iPhone yang kompatibel dengan iOS 7
Dari apa yang saya pelajari sejauh ini, saya yakin sekarang, seperti dalam contoh saya, tidak mungkin memiliki 2 batasan yang berbeda dan terpisah untuk satu elemen ui dalam mode potret dan lanskap dengan iPhone iOS7 berdasarkan kelas ukuran. Akan senang jika saya salah.
sumber