2015-01-09 11 views
5

मैं UITableView प्रतिनिधि विधि viewForHeaderInSection का उपयोग कर रहा हूं ताकि मेरे UITableView में सेक्शन हेडर प्रदान किया जा सके।viewForHeaderInSection autolayout - पिन चौड़ाई

मैं शुरू में इस तरह दृश्य बनाने:

UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 50)]; 

तब का उपयोग कर autolayout तो headerView

समस्या मैं है मैं विशेष रूप से headerView आकार निर्दिष्ट नहीं करना चाहती है लौट कुछ subviews जोड़ें। मैं दृश्य की चौड़ाई के लिए बाएं & दाएं किनारों को पिन करने के लिए Autolayout का उपयोग करना चाहता हूं। यहां समस्या है, मेरे पास Autolayout कोड में उपयोग करने के लिए कोई पर्यवेक्षण नहीं है।

उपर्युक्त कोड का उपयोग करने का अर्थ है कि हेडर व्यू रोटेशन पर ऑटोरेसीज़ नहीं करता है। घूर्णन के बाद आपको टेबलव्यू पुनः लोड करना होगा।

कोई विचार मैं headerView को तालिका दृश्य में किनारों को पिन करने के लिए कैसे सेट कर सकता हूं?

धन्यवाद

उत्तर

2

मेरे परीक्षण से, और इस उत्तर here, UIView कि प्रक्रिया स्वतः ही अपने मूल (0, 0) करने के लिए सेट किया गया है से लौटे, उसकी ऊंचाई की चौड़ाई के लिए सेट मूल्य -tableView: heightForHeaderInSection: और इसकी चौड़ाई से लौटे करने के लिए सेट UITableView

मैं उस UIView पर नियंत्रण जोड़ने में सक्षम था और init विधि में किसी विशेष आकार को निर्दिष्ट किए बिना उन्हें ऑटो लेआउट के साथ भी बाहर रख सकता था।

- (void)layoutControls { 
    [self.headerView addSubview:self.segmentedControl]; 
    [self.headerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(margin)-[control]-(margin)-|" 
                      options:0 
                      metrics:@{@"margin": @(self.segmentedControlLeftRightMargin)} 
                       views:@{@"control": self.segmentedControl}]]; 
    [self.headerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(margin)-[control(==height)]" 
                      options:0 
                      metrics:@{@"margin": @(self.segmentedControlTopMargin), 
                         @"height": @(self.segmentedControlHeight)} 
                       views:@{@"control": self.segmentedControl}]]; 

    [self.headerView addSubview:self.searchBar]; 
    [self.headerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(margin)-[control]-(margin)-|" 
                      options:0 
                      metrics:@{@"margin": @(self.searchBarLeftRightMargin)} 
                       views:@{@"control": self.searchBar}]]; 
    [self.headerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[control1]-(margin1)-[control2]-(margin2)-|" 
                      options:0 
                      metrics:@{@"margin1": @(self.segmentedControlBottomMargin), 
                         @"margin2": @(self.searchBarBottomMargin)} 
                       views:@{@"control1": self.segmentedControl, 
                         @"control2": self.searchBar}]]; 

} 

यहाँ UITableViewDelgate प्रोटोकॉल के लिए तरीके हैं:

self.headerView = [[UIView alloc] init]; 

यहाँ कोड है, जहां मैं हैडर दृश्य के अंदर नियंत्रण से बाहर रखना है:

यहाँ हैडर दृश्य बनाने के लिए मेरे कोड है:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    // The hard-coded values are accurate for my controls, but you might need more advanced logic 
    return 44.0f + self.segmentedControlBottomMargin + 44.0f + self.searchBarBottomMargin; 
} 
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
    return self.headerView; 
} 
+0

धन्यवाद, मैंने कुछ सीखा, एक ज़ीरोरेक्ट व्यू लौटने से सही पूर्ण उपयोग होता है आकार, इसलिए tableview.bounds का उपयोग करने की कोई आवश्यकता नहीं है, हालांकि घूर्णन करते समय यह सही नहीं होता है। आपको टेबलव्यू पुनः लोड करना होगा। मुझे लगता है कि किनारों को पिन करने के लिए कोई पर्यवेक्षण नहीं है। – Darren

+0

हाँ, ऐसा लगता है कि ऑटो लेआउट के "सीमाओं के बाहर" माना जाता है। जब मुझे अतीत में इस व्यवहार की आवश्यकता होती है, तो मैंने वास्तव में 'UITableViewCell' को उप-वर्गीकृत किया है और अनुभाग हेडर के बजाय इसका उपयोग किया है। यदि आप वास्तव में अनुभागों का उपयोग करते हैं, तो यह केवल पंक्ति 0 (शून्य) के लिए सेल हो सकता है। इस तरह, आप ** डीओ ** रोटेशन समर्थन मिलता है। – mbm29414

+0

यह वास्तव में एक बुरा विचार नहीं है। वास्तव में तालिका स्क्रॉल होने पर स्क्रीन पर रहने वाले सेक्शन हेडर को भी रोक देगा। – Darren

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