2011-02-03 19 views
28

के साथ UITextView मुझे UITableViewCell बनाने की आवश्यकता है जिसमें बहुत सारे टेक्स्ट हैं। मुझे पता है कि मैं अपने सेल में UITextView जोड़ सकता हूं, लेकिन प्रत्येक प्रविष्टि में टेक्स्ट की समान मात्रा नहीं होगी।UITableViewCell, गतिशील ऊंचाई

मुझे पता है कि मैं UITableViewCell की ऊंचाई को नियंत्रित कर सकता हूं: -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath, लेकिन वास्तव में यह नहीं है कि मैं क्या देख रहा हूं।

परिदृश्य 1:

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

परिदृश्य 2: अपने सेल पाठ के लिए

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

यह स्पष्ट नहीं है कि आप क्या देख रहे हैं, - (CGFloat) तालिका दृश्य: (UITableView *) तालिका देखें ऊंचाईफॉररोएट इंडेक्सपैथ: (एनएसआईएनएक्सएक्सपीएथ *) इंडेक्सपाथ इसे करने का मानक तरीका है। –

+4

हां, लेकिन जब आप पहले से सेल की ऊंचाई नहीं जानते हैं, तो यह समझ में नहीं आता है। – WrightsCS

उत्तर

34

उपयोग UILabel। फिर आप प्रत्येक सेल के भीतर उस UILabel की ऊंचाई की गणना करने के लिए sizeWithFont:constrainedToSize: का उपयोग कर सकते हैं।

#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 के लिए स्वयं, 'आकार WithFont: constrainedToSize:' का उपयोग आवश्यक आकार की पूर्व-गणना करने के लिए करें और इसे 'drawInRect: withFont:' –

+0

के साथ प्रस्तुत करें किस प्रकार का रैपिंग आकार करता है WitFont: constrainedToSize: मान लीजिए? – Bogatyr

+0

+1 इसके लिए धन्यवाद, मेरे पास टेबल सेल में गतिशील लेबल है और यह पूरी तरह से काम करता है! मुझे textFizeRowAtIndexPath में लेबल आकार को टेक्स्ट आकार गणना में भी सेट करना पड़ा। – Bogatyr

2

यह, बल्कि जटिल सामान है के रूप में यह वह पाठ दृश्य आप जब ग्रंथों आकार की गणना को ध्यान में रखना होगा की contentInset तरह बातें शामिल है: उदाहरण के लिए। मैंने अपने ब्लॉग पर UITableViewCell height based on an inner UITextView की गणना करने के लिए अपनी शिक्षा और समाधान लिखा है। पोस्ट में वह कोड होता है जो सार्वभौमिक ऐप्स, टेबल व्यू शैलियों और ऑटोरोटेशन दोनों के लिए काम करता है।

2

समाधान काफी सरल है और के बाद से आईओएस 7. सुनिश्चित करें कि Scrolling Enabled विकल्प स्टोरीबोर्ड में UITextView के लिए बंद कर दिया है UITableViewCell अंदर बनाओ काम करना चाहिए।

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.rowHeight = UITableViewAutomaticDimension 
    tableView.estimatedRowHeight = 44.0 
} 

यह है कि:

फिर अपने UITableViewController के viewDidLoad में() tableView.rowHeight = UITableViewAutomaticDimension और tableView.estimatedRowHeight > 0 जैसे निर्धारित किया है। UITableViewCell की ऊंचाई को आंतरिक UITextView की ऊंचाई के आधार पर स्वचालित रूप से समायोजित किया जाएगा।

संबंधित मुद्दे