UITableView yerine UICollectionView ne zaman kullanılır?


95

Bunun iOS6'da sunulan UICollectionViewyükseltilmiş bir sürümüne benzediğini fark ettim UITableView, ancak UICollectionViewbunun yerine ne zaman seçmeliyim UITableView?

Hala kullanan Uygulamalar var UITableView, eğer bir UICollectionViewşey UITableViewyapabilirse, insanlar hala neden kullanıyor UITableView? Performans açısından bir fark var mı?

Teşekkürler!

Yanıtlar:


75

Bu gereksinimlere bağlıdır. Uygulama akışı, uygulamaya hangi UI tipinin entegre edileceğini belirler.

İnsanlar çoğunlukla UICollectionviewbir ızgarada gösterilen birden çok görüntüye sahip kullanıcı arabirimi türleri oluşturmak için kullanır . Bu, karmaşık bir mantığa sahip olacaktır UITableView, ancak bununla birlikte UICollectionview, kolay olacaktır.

Kullanırken UICollectionview, seçilen öğelerin değerlerini alarak etiketli düğmeler veya başka şeyler ayarlamanıza gerek yoktur. Sadece alabilirsiniz -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPathve de UITableViewDelegate:

`-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath`

Öğe yerine seçilen satırı alırsınız, bu nedenle kılavuz veya değiştirilmiş öğeler oluşturmak için kullanmak UICollectionviewen iyisidir.

Her bir öğenin listeleme ayrıntıları için, insanlar her öğe hakkında UITableViewdaha fazla bilgi gösterdiği için kullanır .

Apple Belgeleri:

UICollectionView Sınıf Başvurusu

UICollectionView sınıfı, veri öğelerinin sıralı bir koleksiyonunu yönetir ve bunları özelleştirilebilir düzenler kullanarak sunar. Koleksiyon görünümleri, bir koleksiyon görünümünün yalnızca tek sütunlu düzenlerden daha fazlasını destekleyebilmesi dışında tablo görünümleriyle aynı genel işlevi sağlar. Koleksiyon görünümleri, çok sütunlu ızgaralar, döşemeli düzenler, dairesel düzenler ve çok daha fazlasını uygulamak için kullanılabilen özelleştirilebilir düzenleri destekler. Hatta isterseniz bir koleksiyon görünümünün düzenini dinamik olarak değiştirebilirsiniz.

UITableView Sınıf Başvurusu

Tablo görünümü, tek bir sütundaki öğelerin listesini görüntüler. UITableView, UITableView yalnızca dikey kaydırmaya izin vermesine rağmen, kullanıcıların tablo içinde kaydırmasına izin veren bir UIScrollView alt sınıfıdır. Tablonun ayrı ayrı öğelerini içeren hücreler UITableViewCell nesneleridir; UITableView, tablonun görünür satırlarını çizmek için bu nesneleri kullanır. Hücrelerin içeriği (başlıkları ve resimleri) vardır ve sağ kenara yakın aksesuar görünümleri olabilir. Standart aksesuar görünümleri, açıklama göstergeleri veya ayrıntı açıklama düğmeleridir; ilki, bir veri hiyerarşisinde bir sonraki seviyeye götürür ve ikincisi, seçilen bir öğenin ayrıntılı bir görünümüne götürür. Aksesuar görünümleri ayrıca anahtarlar ve kaydırıcılar gibi çerçeve kontrolleri veya özel görünümler olabilir. Tablo görünümleri, kullanıcıların tablonun satırlarını ekleyebileceği, silebileceği ve yeniden sıralayabileceği bir düzenleme moduna girebilir.


3
Genişletilebilirlik açısından düşünüyorum - Koleksiyon görünümü puanları daha fazla !!
thatzprem

Collectionview tüm ihtiyaçlara ek karmaşıklık olmadan hizmet edebildiği halde esneklik sağladığında neden tablo görünümünü kullanmaya ihtiyaç duyduğunu merak ediyorum (bir müşterinin düzeni birden fazla sütuna genişletmesi gerekiyorsa, bunu collectionview ile yapmak oldukça kolay olacaktır. ). Varsayılan olarak her zaman tablo görünümlerini kullanıyordum, ancak şimdi bunun yerine koleksiyon görünümlerine geçmenin mantıklı olup olmadığından şüpheliyim. Bir şey mi kaçırıyorum?
bize vir

hepsi ana gereksinime dayanmaktadır. Koleksiyon görünümü geç tanıtıldı ve o zamana kadar tüm geliştiriciler tablo ve benzeri şeyler yapmak için tablo kullanıyor. ancak artık bir günlük koleksiyon görünümü, tablo görünümü gibi düzen oluşturmak için en popüler olanıdır. aynı zamanda koleksiyon
görünümlerini

Açıklamanız için teşekkürler.
ssowri1

49

İşte kriterlerim:

  • Bir UITableView bunu yapabiliyorsa, onu kullanın

  • Bir UITableView bunu yapmak için çok fazla koda ihtiyaç duyuyorsa veya hiç yapamıyorsa, UICollectionView kullanın.

Bir karar vermeden önce UITableView üzerindeki kısıtlamaları göz önünde bulundurmalısınız: Bu tek bir sütun. Ve yalnızca hücreleri özelleştirebilir, bölüm arka planlarını vb. Özelleştiremezsiniz. Öyleyse, fazladan gösterişsiz şeyler içeren düz bir listeniz varsa - bu temelde bataklık standart bir iOS görünümüne benziyor - o zaman UITableview'i kullanın. Özel girintileriniz veya her bölümün etrafında bir kenarlık varsa, UICollectionView kullanın.

Aslında UICollectionView'i her şey için düşünüyorum, çünkü görünümünüzü bir tablo görünümü olarak geliştirmeye başladığınızda çok pahalı, sonra yapmanız gereken tek şeyi yapamayacağını anlayın. 1. el deneyimi;)

İkisiyle daha fazla deneyim kazandıktan sonra düzenleme yapın: Son paragrafı dikkate almayın. UICollectionView, bir UITableView gibi çalışmasını sağlamak için çok sayıda standart kod gerektirir. UICollectionView'i yalnızca gerçekten ihtiyaç duyulduğunda kullanın. ;)


3
Aradığım mükemmel cevap! Bu daha fazla oylanmalı!
rak appdev

2
Kişisel deneyiminizi ve tavsiyelerinizi ifşa etmek çok faydalıdır!
aero

1
Bunu okurken kesinlikle güldüm, iyi dedin! UITableView, herhangi bir şey kadar özelleştirilebilir, ancak sırayı dengeleyen animasyonlar eklerseniz çökecektir. Cevabınızın Animasyonlar kılavuzu ile gitmesini tavsiye ederim ve onları yenileyebilmeniz için kaç dahili görünümün var olduğunu kişisel olarak öğrenmek için biraz araştırma yapmanızı öneririm ve sonunda bulacağınız "Ayırıcı çizgisini görünmez yapamıyorum" sorunu şaşırtıcı olmayacaktır. kimse. ScrollView, UIButton ve tableView'daki gizli görünümler, şeylerin içinde gizli olduklarını bilene kadar çoğu özelleştirmeyi iptal edin
Stephen J

33

Basit listeler ve ileri / geri gezinme için kullanın UITableView.

Yüksek derecede özelleştirilebilirliğe ihtiyacınız varsa kullanın UICollectionView.

Genel olarak, yazılım geliştirmede, "Olası En Basit Şey" i temsil eden yaklaşımı seçmek en iyisidir.

DÜZENLEME: iOS 14'ten itibaren UICollectionViewartık listeler de yapabilir ve artık önerilen yaklaşımdır. Daha fazla bilgi ve uygulama ayrıntıları için WWDC20'deki bu oturuma bakın: https://developer.apple.com/videos/play/wwdc2020/10026/


14

Benim bakış açıma göre, collectionView ve tableView arasındaki temel fark şudur:

TABLEVIEW -> öğelerin listesini yalnızca bir sütunda gösterir.

KOLEKSİYON GÖRÜNÜMÜ -> birden çok sütunda öğelerin listesini gösterir.

Umarım size yardımcı olur.


11

İPhone için UITableView'ı seçerseniz, önce iPad stratejinizi düşündüğünüzden emin olun. İPad'e özgü bir düzen istiyorsanız, bu tek sütunlu düzenin bir ızgara olmasını isteyebilirsiniz.


8

Gerekli olmasa da, her zaman bir koleksiyon görünümü kullanırım. Bu şekilde, koleksiyonlarımın farklı çözünürlükler için sunulma şeklini kolayca uyarlayabilirim. Bir artı, gelecekte yeniden düzenleme yaparken hızla yeni hücre türleri eklemeye hazır olmasıdır.

Tablo görüşleri görmüyorum. Bir tabloyu temsil etmek için bir koleksiyon görünümü kullanmak çok basit. IMO.


4

Verilerinizin nasıl gösterileceğine tamamen bağlıdır. Yukarıda birçok kişi tarafından belirtildiği gibi, yalnızca tek bir veri kümesine ihtiyacınız varsa ve bu çok karmaşık değilse, UITableViewbaşka bir kullanım için gidin UICollectionView.

UICollectionView özelleştirme dostudur.

Birden fazla hücre yüksekliğiyle uğraşıyorsanız, o zaman gidin UICollectionView.


4

Kişisel deneyimlerime göre bu iki unsur sadece gevşek bir şekilde karşılaştırılmalıdır.

Tablo görünümü

TableView, verileri liste biçiminde göstermek için tasarlanmış bir UI öğesidir. Bir UITableView ile standart olarak gelen belirli işlevler vardır, örneğin:

  • Aksesuar Görünümü
  • Hücre Seçimi Stili
  • Stili Düzenleme (Silme ve düzenleme düğmeleri).

Yukarıdaki öğeler, bir liste biçiminde görüntülenirken ve etkileşimde bulunurken verilerin kullanılabilirliğini artırır. E-postaları görüntülemek gibi.

CollectionView

CollectionView, içeriği özel bir düzen (genellikle liste olmayan herhangi bir şey) kullanarak göstermek için tasarlanmış bir UI öğesidir. CollectionViews, verileri tamamen ısmarlama düzen stillerinde görüntüleme ve aynı zamanda anında dinamik olarak düzenleri değiştirme işlevselliğini geliştirir. Bazı örnekler:

  • Yatay Listeler
  • Fotoğraf Galerileri
  • Küçük resim görünümleri
  • Atlı karıncalar
  • Kadranlar
  • Öğeleri bir harita üzerinde yerleştirme
  • vb.

CollectionViews ayrıca birden fazla seçime izin verir.

Sonuç

Yukarıdan da görebileceğiniz gibi, her ikisi de tamamen farklı kullanım durumlarına sahiptir ve kendi özel veri setlerinin geliştirilmesini ve kullanılabilirliğini artırmak için tasarlanmıştır.

Aşağıdaki etkileşimlerle bir liste stilinde herhangi bir şeyi görüntülemeyi düşünüyorsanız: - Ekleme - Silme - Yeniden sıralama Daha sonra bir UITableView, doğrudan kutudan destek sağlayarak bu işlemi basitleştirecektir.

Başka herhangi bir şey varsa, daha fazla esnekliğe sahip olduğunuz için CollectionView'ın avantajlarından yararlanmalısınız.


2

Her ikisi de gereksinimlere bağlıdır. Tablo Görünümleri ayrıca çeşitli düzenleme senaryolarını destekler. Bu destek, Koleksiyon Görünümü sınıflarında uygulanmamıştır. Bu yöntemlere dayanan bir Tablo Görünümünden dönüştürme yapıyorsanız, Koleksiyon Görünümünde biraz daha ağır bir işlem yapmayı bekleyin. Koleksiyon Görünümü bölüm başlıkları, görünümün herhangi bir yerine yerleştirilebilir. ve UITableView, seçilen öğe değerlerini alarak etiketleri veya diğer şeyleri içeren düğmeleri ayarlamasına gerek yoktur.


1

Pratikte, herkes sadece bir UITableView'e ihtiyaç duyduklarında karşılaştığım UICollectionView kullanıyor. "Tek boyutlu. Yukarı ve aşağı gidiyor. Düzen VE veriler için neden gereksiz delege yöntemleri ekliyorsunuz?". Bir keresinde bir startup'ın UICollectionViewCell'in neden ezildiğini anlamasına yardımcı olmak için fazladan 2 saat harcadım çünkü Animations kılavuzunu, HIG'yi veya UICollectionView kılavuzunu okumayan işletme sahibi onu kullanmaya ve değişken yükseklikler ve animasyonlar eklemeye karar verdi. Söylemeye gerek yok, fazladan düzen delege + Uç olmadığından, sadece bir masa hücresi kullanarak kaçınabileceği, iş açısından kritik olmayan bir konuda başını ağrıttı ve çok fazla zaman kaybetti.

Bunu açıklığa kavuşturmama izin verin, verileriniz ve ekranınız ihtiyaç duyduğunda UICollectionView'in yanındayım. Çok güçlüler. Ancak pratikte gördüğüm çoğu insan bunları listelerde kullanıyor.

Bu başka bir kusuru ortaya çıkarır. Ayrıca, asla değişmeyecek kısa, sabit listelerde de kullanılırlar. Bu durumda, sadece bir Xib yapın. Veya onları istifleyen özel bir görünüm yazın. Neden? Çünkü bir düğme veya anahtarla 5 etiket seti için bellek yönetimine ihtiyacınız yoktur. Değişebilirlerse, evet, bir liste kullanın. Fizik istiyorsanız, UICollectionView bazı harika efektlerle iyi çalışır. Ama gerçekten 5 delege yöntemi ve asla hareket etmeyecek 5 etiket için bir düzen sistemi eklemeniz gerekiyor mu?

Ayrıca, iOS'un artık yerel bir yığınlama görünümüne sahip olduğunu da unutmuyorum. 2D ve animasyon sistemlerinde oldukça becerikli olsam da, istediğimi deforme etmesini asla sağlayamıyorum, bu yüzden yerleşik olanı asla kullanmıyorum.

Tek söylediğim, ihtiyaçlarınızı tanımlayın. Kullanıcı arayüzünüz öğe eklemiyorsa / kaldırmıyorsa ve kendini yenilemiyorsa, bunlardan herhangi birine ihtiyacınız olmayabilir. Ya da belki bir Kart Oyunu yazmak ve bunları sanal olarak bir masanın üzerine atmak, sonra UICollectionView'i onun düzen kılavuzu için bir fizik sistemiyle birlikte kullanmak istiyorsunuz.


0

İhtiyaçlarımıza göre TableView veya CollectionView seçiyoruz.

Misal:

Telefon kişileri için tableView en iyi seçenektir.

Fotoğraf galerisi için koleksiyon görünümü en iyi seçenek olacaktır.


7
Bununla birlikte, bunun nasıl ortaya konulduğu konusunda hemfikir olsam da daha çok bir fikir gibi görünüyor ve bence bu bir cevap değil, sadece bir yorum olmalı.
Popeye

0

Mevcut projemde bu sorunu yaşadım. Hangisini kullanmalı. Benim durumumda gerçekten basitti. İkisine de ihtiyacım vardı. Görünümümün UITableView gibi görünmesine ve ayrıca değişimini / düzenini değiştirmesine ihtiyacım vardı. Böylece UICollectionView kullanıldı. Ekstra özelleştirmeye ihtiyacım olmayan her yerde UITableView kullanıyorum. UiTableView, görüntüleri ve metni içeren varsayılan bir düzen ile geldiğinden - bunu basitlik için kullanıyorum.


0

İhtiyaçlarımıza göre UITableView veya UICollection görünümünü seçiyoruz.

Resimleri veya öğeleri ızgara türünde görüntülemek istiyorsak veya daha fazla özelleştirilebilirliğe ihtiyacımız varsa UICollectionview kullanıyoruz.

Her bir öğeyi ayrıntılar ve alt ayrıntılarla listelemek için UITableView kullanıyoruz.

UICollectionView: UICollectionView sınıfı, veri öğelerinin sıralı bir koleksiyonunu yönetir ve bunları özelleştirilebilir düzenler kullanarak sunar. Koleksiyon görünümleri, bir koleksiyon görünümünün yalnızca tek sütunlu düzenlerden daha fazlasını destekleyebilmesi dışında tablo görünümleriyle aynı genel işlevi sağlar.

UITableView: Bir tablo görünümü, tek bir sütundaki öğelerin listesini görüntüler. UITableView, UITableView yalnızca dikey kaydırmaya izin vermesine rağmen, kullanıcıların tablo içinde kaydırmasına izin veren bir UIScrollView alt sınıfıdır.


0

Izgara Görünümü ekranına yönelik görünümüme göre, UI Koleksiyon Görünümünü kullanın Diğer tüm liste görünümleri UITable Görünümünü kullanın.


0

Şahsen, UICollectionView'ün UITableview'un yapabileceği işlerin çoğunu yapabileceğini düşünüyorum. aynı zamanda kullanımı daha karmaşıktır.

Yöneticinizin gelecekte gereksinimleri değiştirmesi durumunda UICollectionView'i TableView olarak kullanmanızı öneririm.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.