Mengapa batasannya tidak berfungsi?

Mode potret

masukkan deskripsi gambar di sini

Mode lanskap

masukkan deskripsi gambar di sini

Tab Bar diimplementasikan menggunakan UICollectionView (CV). Di CV saya telah menambahkan 4 item:

addSubview(collectionTab)
addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0":collectionTab]))
addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0":collectionTab]))

Ketika saya mengubah orientasi, batasannya tidak berfungsi. Mengapa? Bagaimana cara memperbaikinya? Saya rasa ukuran item tidak dihitung ulang saat saya mengubah tampilan.

Ukuran barang:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: frame.width/4, height: frame.height)
}

person maxim rad    schedule 17.11.2016    source sumber
comment
ukuran item func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -› CGSize { return CGSize(width: frame.width/4, height: frame.height) }   -  person maxim rad    schedule 17.11.2016
comment
Apa itu tab koleksi? Apakah itu nama UICollectionView?   -  person Sajjon    schedule 17.11.2016
comment
Ya, ini tampilan koleksi   -  person maxim rad    schedule 17.11.2016


Jawaban (1)


Coba jalankan invalidateLayout pada UICollectionViewLayout di UICollectionView Anda. Seperti ini

override func viewWillLayoutSubviews {
    myCollectionView.collectionViewLayout.invalidateLayout()
}
person Sajjon    schedule 17.11.2016
comment
Kapan menjalankan fungsi ini? - person maxim rad; 17.11.2016
comment
Cukup implementasikan ini di UIViewController Anda, ini akan dipanggil secara otomatis - person Sajjon; 17.11.2016
comment
Saya rasa ukuran item tidak dihitung ulang saat saya mengubah tampilan - person maxim rad; 17.11.2016
comment
apakah Anda menerapkan collectionView(_:layout:sizeForItemAt:)? Anda harus menghitung ukuran item di sana! - person Sajjon; 17.11.2016
comment
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -› CGSize { return CGSize(lebar: frame.width/4, tinggi: frame.height) } - person maxim rad; 17.11.2016
comment
Bisakah Anda memverifikasi bahwa CollectionView mendapat bingkai baru setelah rotasi? Silakan cetak lebar dan tinggi CollectionView sebelum dan sesudah rotasi di dalam metode viewWillLayoutSubviews - person Sajjon; 17.11.2016
comment
@maximrad apakah anda mencetak frame sebelum dan sesudah rotasi, apa hasilnya? - person Sajjon; 17.11.2016
comment
Terima kasih banyak!! - person maxim rad; 17.11.2016
comment
ganti fungsi viewWillLayoutSubviews() { tabBar.collectionTab.collectionViewLayout.invalidateLayout() } - person maxim rad; 17.11.2016