Apa cara terbaik untuk memanfaatkan fitur tata letak otomatis baru iOS 6 sambil tetap memberikan kompatibilitas dengan perangkat yang lebih lama pada versi iOS sebelumnya?
ios
ios5
backwards-compatibility
ios6
autolayout
sglantz
sumber
sumber
Jawaban:
Autolayout dapat diaktifkan atau dinonaktifkan pada setiap file .storyboard atau .xib. Cukup pilih file tertentu dan modifikasi properti "Use Autolayout" menggunakan inspektur File di Xcode:
Menggunakan file antarmuka yang diaktifkan autolayout dengan target penyebaran yang ditetapkan ke versi iOS sebelum 6.0 menghasilkan kesalahan kompilasi, misalnya:
Salah satu opsi Anda untuk menggunakan pembayaran otomatis dalam suatu proyek dan masih mempertahankan kompatibilitas dengan iOS4-5 adalah untuk membuat dua target : satu untuk target penyebaran iOS 6.0 dan satu untuk versi iOS sebelumnya, misalnya:
Anda juga dapat membuat dua versi untuk masing-masing storyboard dan file XIB dan menggunakan autolayout yang diaktifkan dengan target 6.0 dan yang lainnya dengan target lawas, misalnya:
Anda kemudian menambahkan MainStoryBoardAutoSize ke fase Build target iOS6 dan file lainnya ke target iOS4. Anda dapat mempelajari lebih lanjut tentang menggunakan beberapa target sini .
Bagi saya, biaya penambahan kompleksitas mempertahankan beberapa target dan file antarmuka tampaknya lebih besar daripada manfaat menggunakan autolayout. Kecuali untuk beberapa kasus khusus, Anda mungkin jauh lebih baik menggunakan ukuran otomatis lama (atau layoutSubViews dari kode) secara eksklusif jika kompatibilitas iOS4-5 diperlukan.
sumber
Apakah Anda benar-benar membutuhkan dua target? Saya membuatnya bekerja seperti ini, saya memiliki 2 storyboard seperti yang dikatakan Imre Kelényi, satu dengan auto layouts diaktifkan dan yang lainnya tanpa, kemudian dalam delegasi aplikasi saya hanya memeriksa versi mana yang mereka gunakan dan pilih storyboard yang tepat:
Memiliki 2 target juga berfungsi tetapi sepertinya terlalu berat bagi saya
sumber
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO
berlebihan. Cukup uji kelas iOS 6-saja terhadap nol. Lihat developer.apple.com/library/mac/#documentation/developertools/…Jika perbedaan tata letak tidak besar, jauh lebih mudah untuk menggunakan Springs dan Struts untuk memposisikan elemen.
sumber
Terinspirasi oleh satu gagasan target @ marchinram, ini adalah solusi yang akhirnya saya buat. Dua storyboard, satu untuk struts-and-spring dan satu untuk autolayout. Dalam ringkasan target, saya menetapkan storyboard autolayout sebagai default. Kemudian, di appDelegate, saya memeriksa apakah saya perlu memuat storyboard struts-and-spring pre-6.0 setelah semua:
Juga, saya menetapkan target penempatan storyboard struts-and-spring ke iOS 5.1, dan storyboard autolayout ke Project SDK (iOS 6.0).
Saya benar-benar ingin melakukan peralihan sebelum default di storyboard dimuat, di willFinishLaunchingWithOptions: tetapi itu menghasilkan 'NSInvalidUnarchiveOperationException', alasan: 'Tidak dapat membuat instance kelas bernama NSLayoutConstraint' tidak peduli apa yang saya coba.
sumber
Cobalah untuk menggunakan RRAutoLayout: https://github.com/RolandasRazma/RRAutoLayout Ini adalah backport iOS6 AutoLayout ke iOS5.
sumber
Saya telah menemukan pengaturan ukuran tampilan utama Xibs ke Freeform, dan kemudian menggunakan Autosizing works a treat. Tidak mengotak dalam kode untuk masalah tampilan.
sumber