UİTableView esnek/dinamik heightForRowAtİndexPath
Durumda
Normalde cep Kur cellForRowAtIndexPath
temsilci yöntemi kullanırsınız. Bilgileri hücre kümesi hücre nasıl çekilir ve boyutu ne olacak için önemlidir.
Ne yazık ki heightForRowAtIndexPath
temsilci yöntemi çağrılır önce cellForRowAtIndexPath
temsilci yöntem o kadar veremeyiz sadece söyle temsilci dönmek yüksekliğinin hücre beri bu olacak sıfır o zaman.
Hücre tablo çizilir önce boyutunu hesaplamak gerekiyor. Neyse ki sadece bir yöntem yoktur, sizeWithFont
, NSString sınıfına ait. Ancak dinamik olarak hücre elemanlarını nasıl verileceğini bilmek gerekir doğru boyutunu hesaplamak için sorun yoktur. Bir örnekte bu açıkça ifade edeceğim
Bir etiket textLabel
adında içeren UITableViewCell
, düşünün. cellForRowAtIndexPath
temsilci yöntemi içinde temelde belirli bir genişlikte metin mevcut ihtiyacı olduğu kadar satır olabilir etiketi söyler textLabel.numberOfLines = 0
, yerleştiriyoruz. Sorun olursa textLabel bir metin daha verirsek o zaman genişliği başlangıçta verilen textLabel oluşur. İkinci çizgi görünür, ama hücrenin yüksekliğini otomatik olarak ayarlanacak ve berbat görünümlü tablo bir görüşe sahip oluyoruz.
Daha önce, sizeWithFont
yüksekliğini hesaplamak için kullanabiliriz, ama genişliği, vb için kullanılan bilmek gerekiyor " dedi. Basitlik nedeniyle, biz sadece genişlik değer veriyorsan, genişliği 320.0 etrafında (dikkate alarak doldurma değil) olacağını koda ihtiyacımız olabilir. Ama eğer genişliği sonra 300.0 ve hücrenin etrafında olurdu düz yerine UİTableViewStyleGrouped kullansak ne olur yine berbat olurdu. Ya eğer portreden manzaraya takas olur, çok daha geniş bir alan var, Henüz 300.0 biz kodlanmış bir yana da ne olacak.
Bu noktada kendinizi hardcoding önlemek için ne kadar soru sorman gereken durumdur.
Kendi Düşüncelerimi
Bazı bölüm ve bir satır için bir hücreyi almak için UİTableView bir sınıfa ait olduğunu cellForRowAtIndexPath
yöntem diyebiliriz. Bunu yapmak istemediğini söyledi mesajların bir çift okudum, ama gerçekten anlamıyorum. Evet, zaten hücre ayıracağını katılıyorum ama heightForRowAtIndexPath
temsilci yöntemi tek hücreli zaten ayrılacak kadar görülebilir Hücre denir. Eğer düzgün hücre cellForRowAtIndexPath
yöntemi olarak tahsis edilecektir. dequeueReusableCellWithIdentifier
kullanıyorsanız, yerine bir işaretçi kullanılır ve özellikleri sadece ayarlanır. Sorun ne o zaman?
Not hücre DEĞİL çizilmiş içinde cellForRowAtIndexPath
temsilci yöntemi, zaman tablosunu görüntülemek hücre görülür hale geliyor senaryoyu arayın setNeedDisplay
yöntemi UİTableVieCell tetikler drawRect
yöntem çizmek için hücre. Yani doğrudan cellForRowAtIndexPath
temsilci arıyor iki kez çekilmiş olmalı çünkü performans kaybetmez.
Tamam mı heightForRowAtIndexPath
temsilci yöntemi içinde cellForRowAtIndexPath
temsilci yöntemini çağırarak tüm bilgileri hücre hakkında gerek boyut belirlemek için elimize.
Belki de Eğer hücre Değer1 tarzda ne varsa, tüm seçenekleri, akan sizeForCell
kendi yöntemi veya Değer2, vb oluşturabilirsiniz.
Sonuç/Soru
Sadece düşüncelerimi açıklanan bir teori, eğer yazdıklarımı doğru olup olmadığını bilmek istiyorum. Ya da belki aynı şeyi yapmak için başka bir yol olduğunu. İşleri mümkün olduğu kadar esnek yapmak istiyorum unutmayın.
CEVAP
Evet, zaten hücre ayıracağını katılıyorum ama heightForRowAtİndexPath temsilci yöntemi tek hücreli zaten ayrılacak kadar görülebilir Hücre denir.
Bu yanlıştır. Tablo görünümü heightForRowAtIndexPath
uygulamaya ise tablodaki satır görünümü, yalnızca olanları gösteriliyor aramak gerekiyor. Nedeni toplam yüksekliği doğru kaydırma göstergeleri görüntülemek için anlamaya ihtiyacı var.
Dinamik hücre düzenleri için UİTableVi...
Java iyi bir dinamik SQL oluşturucu kü...
Nasıl Emacs Lisp dinamik kapsama ile y...
Nasıl layout_weight dinamik olarak kod...
UİTableView uzun basın...