2015-05-14 7 views
8

Yalnızca iOS 8 uygulamalarında boyut sınıfları kullanıyorum ve esnek bir genişliği olan UITableViewCell içinde görünümüm var. Bunun da otomatik düzen kısıtlamaları tanımlanmıştır: Görüldüğü gibiUITableViewCell'de Esnek Genişlikli Görünüm için Son Düzen Boyutunu Algıla

enter image description here

, genişliği cihazı genişliği/yönüne bağlı olarak değişir. I cellForRowAtIndexPath kendi çerçevesini bastırırken

bir 400 genişliği göstermektedir (180.0, 10.0, 400.0, 60.0) bkz. Ancak simülatördeki görünümü ölçtüğümde, sadece 175 genişliğindeki'dur, bu da görüşümün içeriğinin kesilmesiyle desteklenir (içinde bir şeyler çiziyorum).

UITableViewCell 'un içeriğinin ve alt görünümlerinin ne zaman tamamlandığını nasıl anlarım? Böylece, görünümümdeki nesneleri yeniden çizebilirim?

Güncelleme cellForRowAtIndexPath yılında

Ben hücreyi almak için aşağıdaki yapıyorum:

let cell = tableView.dequeueReusableCellWithIdentifier("TimeTypeCell", forIndexPath: indexPath) as! TimeTypeCell 

let customField = customFields[indexPath.row] 

cell.fieldNameLabel.text = customField["name"] as? String 
cell.fieldValueLabel.text = customField["total"] as? String 
cell.graphData = customField["totalGraph"] as! [Double] 

cell.fieldGraph.dataSource = cell.self 
cell.fieldGraph.delegate = cell.self 

cell.fieldGraph.reloadData() //This is where the redrawing happens 
+0

deneyin viewDidLayoutSubviews –

+2

Anladığım kadarıyla, 'viewDidLayoutSubviews' UITableViewController'' yöntemidir. UITableViewCell için eşdeğer bir şey var mı? –

cevap

13

. Hücrenin kendisi tableView.dequeueReusableCellWithIdentifier(_, forIndexPath:)'dan döndürüldüğünde doğru boyutta olsa da, içerik görünümünün hemen düzeni göstermediği görülüyor, bu nedenle bu noktaya kadar ihtiyacınız olduğunda manuel olarak aramanız gerekiyor.

+0

Parlak, işe yarıyor. Teşekkür ederim! –

+4

Teşekkürler !!!! Mükemmel cevap! Bunu - (void) tableView: (UITableView *) tableView willDisplayCell: (UITableViewCell *) hücre forRowAtIndexPath: (NSIndexPath *) indexPath –

+1

Bu artık işe yaramıyor gibi görünüyor. XCode 8, vb .. – Joel

0

Sen viewWillLayoutSubviews veya viewDidLayoutSubviews genişlik kontrol etmek gerek duyarsınız.

içine println(self.tableView.frame.width) koyarsanız viewDidLoad, viewWillAppear, viewDidAppear, viewWillLayoutSubviews ve viewDidLayoutSubviews her yöntemi denir olarak genişliğini görmek mümkün olacak. İçerik görünümlerini doğru bir şekilde almak için cell.contentView.layoutIfNeeded() numaralı telefonu arayın.

+0

Tablonun genişliğini görebiliyorum ve söz konusu görünüm, "viewDidLayoutSubviews" işlevine yapılan birkaç çağrıdan sonra doğru genişliğini gösteriyor, ancak sorunum yeniden düzenleme işlemini tamamlayabilmem için bilmem gereken bir şeydir. Bana göre. –

11

Ben basan UITableViewCell.layoutSubviews yöntemi ile sona erdi:

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    [self.contentView layoutSubviews]; // this does the trick 
}