मैं इस स्थिति का अनुकरण करने की कोशिश कर रहा था, जहां मुझे UITableView के बारे में बैठे एक स्वनिर्धारित हेडर की आवश्यकता थी। मैंने अपनी "नेविगेशन" पट्टी को रोल किया क्योंकि यह पृष्ठ पर अन्य सामानों के एक समूह के नीचे बैठता है और मैं चाहता था कि अनुभाग हेडर डिफ़ॉल्ट "डॉकिंग" व्यवहार का पालन करें। मुझे लगता है कि मैंने फेसबुक / इंस्टाग्राम / क्रोम / आदि में देखी जाने वाली शैली में एक अन्य वस्तु के साथ एक UITableView / UIScrollView को एक साथ समायोजित करने के लिए एक बहुत ही चतुर और रसीला तरीका पाया। क्षुधा।
मेरी .xib फ़ाइल में, मेरे पास मेरे घटक एक फ़्रीफ़ॉर्म दृश्य में लोड किए गए हैं: http://imgur.com/0z9yebJ (क्षमा करें, आपके पास इनलाइन छवियां नहीं हैं)
ध्यान दें कि, बाएं साइडबार में, मुख्य हेडर दृश्य के पीछे तालिका का आदेश दिया गया है। आप स्क्रीनशॉट से नहीं बता सकते हैं, लेकिन इसमें मुख्य हेडर दृश्य के समान वाई स्थिति है। चूंकि यह दृष्टि से बाहर है, UITableView पर 76 (मुख्य हेडर दृश्य की ऊंचाई) पर सेट की गई सामग्री।
UIScrollView के साथ एकरूपता में मुख्य हेडर दृश्य को स्लाइड करने के लिए, मैं कुछ गणना करने के लिए UIScrollViewDelegate के ScrollViewDidScroll तरीकों का उपयोग करता हूं और UIScrollView के कंटेंट को बदलने के साथ-साथ मुख्य हेडर व्यू के फ्रेम को बदलता हूं।
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
UIEdgeInsets insets = scrollView.contentInset;
//tableViewInsetDelta and tableViewOriginalInsetValue are NSInteger variables that I set to 0 and 76, respectively, in viewDidLoad
tableViewInsetDelta = tableViewOriginalInsetValue + scrollView.contentOffset.y;
insets.top = tableViewOriginalInsetValue - tableViewInsetDelta;
if (scrollView.contentOffset.y > -76 && scrollView.contentOffset.y < 0) {
[scrollView setContentInset:insets];
self.pathTitleContainer.frame = CGRectMake(self.pathTitleContainer.frame.origin.x, 44 - tableViewInsetDelta, self.pathTitleContainer.frame.size.width, self.pathTitleContainer.frame.size.height);
} else if (scrollView.contentOffset.y > 0) {
insets.top = 0;
[scrollView setContentInset:insets];
self.pathTitleContainer.frame = CGRectMake(self.pathTitleContainer.frame.origin.x, -32, self.pathTitleContainer.frame.size.width, self.pathTitleContainer.frame.size.height);
} else if (scrollView.contentOffset.y < -76) {
insets.top = 76;
[scrollView setContentInset:insets];
self.pathTitleContainer.frame = CGRectMake(self.pathTitleContainer.frame.origin.x, 44, self.pathTitleContainer.frame.size.width, self.pathTitleContainer.frame.size.height);
}
}
पहले अगर पहले की सीमा के बाहर हैं बयान बड़े कार्य करने का सबसे करता है, लेकिन मैं स्थितियों में, जहां उपयोगकर्ता जबरदस्ती खींच रहा है और प्रारंभिक contentOffset मूल्यों scrollViewDidScroll के लिए भेजा संभालने के लिए दो अन्य को शामिल करने के लिए किया था , तो बयान।
अंततः, यह मेरे लिए वास्तव में अच्छा काम कर रहा है। मैं अपनी परियोजनाओं को फूला हुआ उपवर्गों के साथ लोड करने से नफरत करता हूं। मैं यह नहीं बोल सकता कि क्या यह सबसे अच्छा समाधान प्रदर्शन-वार है (मैं स्क्रॉल कोड में कोई भी कोड डालने में हमेशा हिचकिचाता हूँ क्योंकि यह हर समय कहा जाता है), लेकिन कोड पदचिह्न वह सबसे छोटा है जो मैंने किसी में देखा है इस समस्या का हल और इसमें UITcrollView में एक UITableView का नामकरण शामिल नहीं है (Apple प्रलेखन में इस के खिलाफ सलाह देता है और UITableView पर घटनाओं को थोड़ा स्पर्श करता है)। आशा है कि यह किसी की मदद करता है!