2015-06-25 8 views
7

आईओएस 8.3 सिम्युलेटर और एक्सकोड 6.3.2 का उपयोग करना।एक्सेसरीज़ के साथ आईओएस 8 सेल्फ साइजिंग सेल

मैं आईओएस 8 में स्वयं आकार देने वाली कोशिकाओं तकनीक का उपयोग कर रहा हूं, और जब सेल में कोई सहायक दृश्य नहीं होता है तो यह बहुत ही काम करता है, लेकिन जब सेल में एक्सेसरी व्यू होता है तो टूट जाता है। मैं सेल के अंदर लेबल पर बाधाओं सेट:

UILabel constraints in a UITableViewCell

तो मैं एक estimatedRowHeight का उपयोग करें और rowHeightUITableViewAutomaticDimension करने के लिए सेट (यहाँ मैं छोड़ते हुए हूँ tableView:numberOfRowsInSection:, लेकिन यह सिर्फ इस उदाहरण के लिए 3 रिटर्न):

@implementation MyTableViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.tableView.estimatedRowHeight = 44.0f; 
    self.tableView.rowHeight = UITableViewAutomaticDimension; 
} 

... 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:@"myCell" forIndexPath:indexPath]; 

    cell.titleLabel.text = @"Test comment Test comment Test comment Test comment Test comment Test comment Test comment Test comment Test comment Test comment Test comment "; 

    return cell; 
} 

@end 

और bam, सब कुछ बहुत अच्छा लगता है:

UITableView looks fine

लेकिन जब मैं एक सहायक दृश्य जोड़ने स्टोरीबोर्ड में, कोड के किसी भी बदले बिना:

With accessory view

प्रथम कक्ष नरक में चला जाता है। Xcode के दृष्टिकोण डिबगर मुझसे कहता लेबल ऊंचाई 1785 अंक है, और मैं एक gif उपयोग करने के लिए इसे यहाँ दिखाने के लिए था:

Huge cell

मैं नोटिस करते हैं कि अन्य दो कोशिकाओं ठीक आकार के होते हैं। मैं यह भी ध्यान देता हूं कि जब मैं सिम्युलेटर को घुमाता हूं, तो पहले सेल को पोर्ट्रेट पर घुमाए जाने के बाद, ठीक से आकार बदल जाता है।

क्या किसी को पता है कि सहायक दृश्य इसे इतनी बुरी तरह क्यों खराब करता है, और इसे ठीक करने के लिए मैं क्या कर सकता हूं? एक नमूना परियोजना http://github.com/UberJason/SelfSizingNightmare पर उपलब्ध है।

उत्तर

0

ऐसा लगता है कि सेल के अंदर लेबल numberOfLines = 0 है।

हालांकि मुझे यकीन नहीं है कि ऐसा क्यों लगता है, ऐसा लगता है कि सेल को एक्सेसरीज़ जोड़ने से पहले लेआउट ऑटो लेआउट लेबल की ऊंचाई की गणना करने में असमर्थ है जब तालिका पहले लोड होती है।

मैं लेबल के लिए एक पसंदीदा अधिकतम चौड़ाई जोड़कर अपने उदाहरण को ठीक करने में सक्षम था - जो समय में लेआउट प्रणाली आंकड़ा ऊंचाई बाहर जाने के लिए पर्याप्त हो रहा है:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:@"myCell" forIndexPath:indexPath]; 

    // Give the layout system something to help it estimate the label height  
    cell.titleLabel.preferredMaxLayoutWidth = self.titleLabel.bounds.size.width; 
    cell.titleLabel.text = @"Test comment Test comment Test comment Test comment Test comment Test comment Test comment Test comment Test comment Test comment Test comment "; 

    return cell; 
} 

वैकल्पिक रूप से, में [tableView reloadData] बुला viewDidAppear भी इसे ठीक करने लगता है।

+0

मैं मानता हूं कि सहायक दृश्य समस्याओं का कारण बनता है। पसंदीदा मैक्सलेआउट विथथ को सेट करने से इस मामले में मदद मिल सकती है, लेकिन मेरे पास एक्सेसरीज़ दृश्यों के साथ अन्य आत्म-आकार वाले सेल (थोड़ा अधिक जटिल लेआउट के साथ) हैं जहां इससे मदद नहीं मिली। इसके अलावा, देखने में [tableView reloadData] को कॉल करना DidAppear काम करता है, लेकिन यह एक बदसूरत उपयोगकर्ता अनुभव बनाता है क्योंकि कोशिकाएं "पॉप" जगह में होती हैं ... वैसे भी, यह समस्या आईओएस 9 बीटा में बेहतर हल हो जाती है, इसलिए मैं बस निर्णय नहीं ले रहा हूं वास्तव में इसके बारे में चिंता करने के लिए। – UberJason

2

यह वास्तव में एक बग है। मैंने आपकी परियोजना ऐप्पल को भेजी है। ऐप्पल से एक जवाब है।

enter image description here

+0

कूल, मैं इसे आईओएस 9 बीटा 3 में देख लूंगा!मैंने बीटा 1 या 2 में इसे देखा, और यह ठीक लग रहा था, हालांकि अधिक विचारों के साथ अधिक जटिल लेआउट के साथ काम करते समय सामान्य रूप से आत्म-आकार देने वाली कोशिकाओं को कभी-कभी थोड़ा सा भद्दा हो सकता था। उम्मीद है कि बीटा 3 चीजों को ठोस बना दिया। – UberJason

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