2011-02-03 25 views
28

Bir çok metin içeren bir UITableViewCell yapmam gerekiyor. Hücremime bir UITextView ekleyebileceğimi biliyorum, ancak her giriş aynı miktarda metin içermeyecek.UITableViewCell, dinamik yüksekliğe sahip UITextView

UITableViewCell'un yüksekliğini -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath ile kontrol edebildiğimi biliyorum, ancak tam olarak aradığım şey bu değil.

Senaryo 1:

--------------- 
| First Cell | 
--------------- 
--------------- 
| Second Cell | 
| with some  | 
| text.   | 
--------------- 
--------------- 
| Third Cell | 
--------------- 

Senaryo 2: Cep metin için

--------------- 
| First Cell | 
--------------- 
--------------- 
| Second Cell | 
| with some  | 
| more text and | 
| an unknown | 
| cell height. | 
--------------- 
--------------- 
| Third Cell | 
--------------- 
+0

Ne aradığınız belli değil, - (CGFloat) tableView: (UITableView *) tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath bunu yapmanın standart yoludur. –

+4

Evet, ancak hücrenin yüksekliğini önceden bilmediğinizde, mantıklı değil. – WrightsCS

cevap

34

kullanın UILabel. Daha sonra, her bir hücre içindeki UILabel'ın yüksekliğini hesaplamak için sizeWithFont:constrainedToSize: kullanabilirsiniz. Eğer metinler boyutunu hesaplarken dikkate almak zorunda kalacak o metin bakış contentInset gibi şeyler karıştırmak gibi

#define PADDING 10.0f 

- (CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSString *text = [self.items objectAtIndex:indexPath.row]; 
    CGSize textSize = [text sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:CGSizeMake(self.tableView.frame.size.width - PADDING * 3, 1000.0f)]; 

    return textSize.height + PADDING * 3; 
} 
+2

UILabel'ın kendisi için, gereken büyüklüğü önceden hesaplamak ve 'drawInRect: withFont: ' –

+0

ile ne tür bir kaydırma yapmak için sizeWithFont: restrictedToSize:' komutunu kullanın.WithFont: Ne tür bir sarma yapılıyor: constrainedToSize: varsayalım? – Bogatyr

+0

+1 bunun için teşekkürler, bir tablo hücresinde dinamik bir etiket var ve bu mükemmel çalıştı! Ayrıca, etiketin çerçevesini cellForRowAtIndexPath içinde textSize hesaplamasına ayarladım. – Bogatyr

2

Çözüm oldukça basit ve iOS 7. Scrolling Enabled seçenek film şeridi içinde UITableViewCellUITextView için kapalı açık olduğundan emin olun beri çalışmalıdır. bu kadar

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.rowHeight = UITableViewAutomaticDimension 
    tableView.estimatedRowHeight = 44.0 
} 

:

Ardından UITableViewController en viewDidLoad() gibi tableView.rowHeight = UITableViewAutomaticDimension ve tableView.estimatedRowHeight > 0 ayarlayın. UITableViewCell'un yüksekliği, iç UITextView'un yüksekliğine göre otomatik olarak ayarlanır.

İlgili konular