तो यूआईटीबल व्यू में जब आपके पास अनुभाग होते हैं तो अनुभाग दृश्य शीर्ष पर चिपक जाता है जब तक कि अगला अनुभाग इसे ओवरलैप नहीं करता है और फिर इसे शीर्ष पर बदल देता है। मैं एक समान प्रभाव रखना चाहता हूं, जहां मूल रूप से मेरे UIScrollView में UIView है, जो UIView अनुभागों का प्रतिनिधित्व करता है और जब यह शीर्ष पर जाता है .. मैं चाहता हूं कि यह वहां रहे और न जाएं। मैं यह कैसे करु? मैं इस या तो layoutSubviews या scrollViewDidScroll में किया और UIView पर एक हेरफेर कर किए जाने की आवश्यकता लगता है ..UIScrollView में UIView को शीर्ष पर ले जाएं जब
उत्तर
अगर मैं सही ढंग से याद है, 2010 WWDC ScrollView प्रस्तुति ठीक चर्चा की दृष्टि रखने के लिए एक स्थिर स्थिति में जबकि अन्य तत्वों के चारों ओर स्क्रॉल । वीडियो देखें और आपके पास लागू करने के लिए एक स्पष्ट कट दृष्टिकोण होना चाहिए।
यह आवश्यक रूप से scrollViewDidScroll कॉलबैक के आधार पर फ़्रेम अपडेट कर रहा है (हालांकि स्मृति बेहतर बिंदुओं पर थोड़ा आलसी है)।
UIScrollView में UIView बनाने के लिए जब तक स्क्रॉल करना शीर्ष पर कायम:
- (void)createHeaderView:(UIView*)headerView {
_headerView = [headerView retain];
_headerViewInitialY = _headerView.frame.origin.y;
[_scrollView addSubview:_headerView];
_scrollView.delegate = self;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGRect headerFrame = _headerView.frame;
headerFrame.origin.y = MAX(_headerViewInitialY, scrollView.contentOffset.y);
_headerView.frame = headerFrame;
}
वास्तव में अच्छा लग रहा है – svmrajesh
सुनिश्चित करें कि जिस दृश्य के लिए आप स्क्रॉल को पकड़ने का इरादा रखते हैं उसके पास एक प्रतिनिधि सेट है, और वह प्रतिनिधि है जहां scrollViewDidScroll लाइव होगा। यदि आप अपने नियंत्रक को प्रोटोकॉल
पर नियंत्रक में 'स्वयं' के रूप में असाइन कर सकते हैं मैंने कोशिश की और यह ठीक काम करता है लेकिन मेरा विचार पारदर्शी हो गया है और मैंने सबकुछ करने की कोशिश की लेकिन सफल नहीं हुआ, इसलिए कृपया आप मेरी मदद कर सकते हैं या कारण क्यों हो रहा है। यह केवल तब तक पारदर्शी हो जाता है जब तक यह शीर्ष पर चिपक जाता है – Soniya
स्विफ्ट समाधान EVYA की प्रतिक्रिया के आधार पर:
var navigationBarOriginalOffset : CGFloat?
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
navigationBarOriginalOffset = navigationBar.frame.origin.y
}
func scrollViewDidScroll(scrollView: UIScrollView) {
navigationBar.frame.origin.y = max(navigationBarOriginalOffset!, scrollView.contentOffset.y)
}
Evya के समाधान वास्तव में अच्छी तरह से काम करता है, फिर भी आप का उपयोग करता है, तो ऑटो लेआउट, आपको ऐसा कुछ करना चाहिए (ऑटो लेआउट सिंटैक्स Masonry में लिखा गया है, लेकिन आपको विचार मिलता है।):
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
//Make the header view sticky to the top.
[self.headerView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.scrollView.mas_top).with.offset(scrollView.contentOffset.y);
make.left.equalTo(self.scrollView.mas_left);
make.right.equalTo(self.scrollView.mas_right);
make.height.equalTo(@(headerViewHeight));
}];
[self.scrollView bringSubviewToFront:self.headerView];
}
दुर्भाग्य से यह आपको स्क्रॉल आंदोलन के प्रत्येक फ्रेम के साथ लेआउट बाधाओं को फिर से बनाने के लिए मजबूर करता है। इसके बजाय, आपको क्या करना चाहिए जिसमें कंटेनर में 'UIScrollView' है और हेडर का शीर्ष * कंटेनर * शीर्ष के बराबर है, स्क्रॉलव्यू के शीर्ष प्लस सामग्री ऑफ़सेट नहीं। ऐसा करने से आप एक बार बाधाओं को स्थापित कर सकते हैं। –
mas_updateConstraints – Jaro
- 1. टिंकर कैनवास आइटम को शीर्ष स्तर पर ले जाएं
- 2. UIView/UIScrollView
- 3. स्क्रीन को कुछ स्थिति पर ले जाएं
- 4. UIScrollView ImageView शीर्ष
- 5. किसी आइटम को सूची में ले जाएं?
- 6. गिट: HEAD को पिछली प्रतिबद्धता पर वापस ले जाएं
- 7. ब्राउज़र पेज के शीर्ष पर कैसे जाएं
- 8. आईफोन - UIView addSubview गैप शीर्ष पर
- 9. ट्रैश में ले जाएं और संदर्भ
- 10. वस्तु को 1 पृष्ठ से दूसरे स्थान पर ले जाएं?
- 11. हडसन नौकरी को दूसरे सर्वर पर ले जाएं
- 12. RavenDb को किसी अन्य सर्वर पर ले जाएं
- 13. इंटेलिजे आईडीईए: लाइन ले जाएं?
- 14. कन्स्ट्रक्टर ले जाएं, std :: move का उपयोग करके दो ऑब्जेक्ट्स के बीच वेक्टर को ले जाएं?
- 15. कर्सर को इनपुट फ़ील्ड की शुरुआत में ले जाएं?
- 16. UIScrollView पर स्पर्श करें और UIView के घटकों [जो UIScrollView के अंदर रखा गया है] पर
- 17. डेल्फी डिबगिंग में प्रोग्राम काउंटर को ले जाएं
- 18. कर्सर को EditText के अंत में ले जाएं?
- 19. आईओएस: निश्चित स्थिति में UITableView के शीर्ष पर UIView रखें
- 20. टेबलए से टेबल-आर्काइव में पंक्तियों को ले जाएं
- 21. माउस को स्थिति में ले जाएं और बाएं क्लिक करें
- 22. किसी ऑब्जेक्ट को बेजियर वक्र की दिशा में ले जाएं?
- 23. शरीर को एक विशिष्ट स्थिति में ले जाएं - Box2D
- 24. एसवीएन: लंबित परिवर्तनों को एक नई शाखा में ले जाएं
- 25. किसी मान को किसी भिन्न वातावरण में ले जाएं
- 26. jquery, एक आंतरिक तत्व को पहली स्थिति में ले जाएं?
- 27. जावा में फ़ाइल ऑपरेशंस को ले जाएं/कॉपी करें
- 28. गिट: विशिष्ट शाखाओं को दूसरी शाखा में ले जाएं
- 29. एक टेबल से दूसरी तालिका में पंक्ति को ले जाएं?
- 30. कन्स्ट्रक्टर और कॉन्स्ट सदस्य चर ले जाएं
हम्म .. मूल रूप से आपको यह जांचना होगा कि क्या विभाजित UIView शीर्ष पर है और फिर इसे सही रखें? मेरा मुद्दा यह निर्धारित करना है कि यह निर्धारित करने के लिए कि क्या अनुभागित UIView "शीर्ष" – xonegirlz
पर है, यह निर्धारित करने के लिए कि कौन सा दृश्य शीर्ष पर है, आप पर्यवेक्षण से इसके सबव्यूज़ के सरणी के लिए पूछ सकते हैं, उदा। एनएसएआरएआरई * सबव्यूज = [पर्यवेक्षण सबव्यू]। फिर, उन सबव्यूज़ के इंडेक्स के लिए अपनी सरणी से पूछें जिन्हें आप तुलना करना चाहते हैं, उदाहरण के लिए, NSUInteger oneIndex = [सबव्यूज इंडेक्सऑफ ऑब्जेक्ट: व्यूऑन], दो इंडेक्स = [सबव्यूज इंडेक्सऑफ ऑब्जेक्ट: व्यू ट्वू]। एक बार जब आप दोनों सबव्यूज़ के लिए इंडेक्स जाते हैं, तो मूल्यांकन करें कि यह निर्धारित करने के लिए कि कौन सा है, दूसरे के शीर्ष पर है। – isaac
जब मैं शीर्ष पर कहता हूं, इसका मतलब एक दूसरे के शीर्ष पर नहीं है .. लेकिन मेरा मतलब है कि सामग्री पर कौन है। ऑफसेट.ए – xonegirlz