क्या कोई मुझे समझा सकता है कि UIScrollView
उदाहरण में contentInset संपत्ति का उपयोग किस लिए किया जाता है? और शायद एक उदाहरण प्रदान करें?
क्या कोई मुझे समझा सकता है कि UIScrollView
उदाहरण में contentInset संपत्ति का उपयोग किस लिए किया जाता है? और शायद एक उदाहरण प्रदान करें?
जवाबों:
यह सामग्री दृश्य और संलग्नक स्क्रॉल दृश्य के बीच इनसेट की दूरी निर्धारित करता है।
Obj सी
aScrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 7.0);
स्विफ्ट 5.0
aScrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 7.0)
यहाँ स्क्रॉल विचारों पर एक अच्छा iOS संदर्भ पुस्तकालय लेख है जिसमें एक सूचनात्मक स्क्रीनशॉट है (अंजीर 1-3) - मैं इसे यहाँ पाठ के माध्यम से दोहराऊंगा:
_|←_cW_→_|_↓_
| |
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
_|_______|___
↑
(cH = contentSize.height; cW = contentSize.width)
स्क्रॉल दृश्य निर्दिष्ट सामग्री इनसेट द्वारा प्रदान किए जाने वाले सामग्री दृश्य प्लस को जोड़ता है।
padding
संपत्ति के समान है ।
जबकि jball का जवाब सामग्री के विवरण का एक उत्कृष्ट विवरण है, यह इस सवाल का जवाब नहीं देता है कि इसका उपयोग कब करना है। मैं उनके चित्र से उधार लूंगा:
_|←_cW_→_|_↓_
| |
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
|content|
-------------↑-
ऐसा तब होता है जब आप इसे करते हैं, लेकिन जब आप स्क्रॉल करते हैं, तो इसकी उपयोगिता केवल यह बताती है:
_|←_cW_→_|_↓_
|content| ← content is still visible
---------------
|content| ↑
↑ |content| contentInset.top
cH |content|
↓ |content| contentInset.bottom
|content| ↓
---------------
_|_______|___
↑
सामग्री की वह शीर्ष पंक्ति अभी भी दिखाई देगी क्योंकि यह अभी भी स्क्रॉल दृश्य के फ्रेम के अंदर है। शीर्ष ऑफ़सेट के बारे में सोचने का एक तरीका यह है कि "स्क्रॉल व्यू को नीचे ले जाने के लिए सामग्री को कैसे स्थानांतरित किया जाए जब हम शीर्ष पर सभी तरह से स्क्रॉल किए जाते हैं"
एक जगह देखने के लिए जहां यह वास्तव में उपयोग किया जाता है, iphone पर बिल्ड-इन फोटोज ऐप देखें। नेविगेशन बार और स्थिति पट्टी पारदर्शी हैं, और स्क्रॉल दृश्य की सामग्री नीचे दिखाई दे रही है। ऐसा इसलिए है क्योंकि स्क्रॉल दृश्य का फ्रेम उस तक फैला हुआ है। लेकिन अगर यह सामग्री इनसेट के लिए नहीं था, तो आप कभी भी उस पारदर्शी नेविगेशन बार को स्पष्ट नहीं कर पाएंगे, जब आप शीर्ष पर जाते हैं।
कंटेंट इनसेट्स यूजर इंटरफेस के अन्य हिस्सों के नीचे जाने वाली सामग्री को हल करने की समस्या को हल करते हैं और फिर भी स्क्रॉल बार का उपयोग करते हुए अभी भी उपलब्ध हैं। दूसरे शब्दों में, सामग्री इनसेट का उद्देश्य इंटरैक्शन क्षेत्र को उसके वास्तविक क्षेत्र से छोटा बनाना है।
उस मामले पर विचार करें जहां हमारे पास स्क्रीन के तीन तार्किक क्षेत्र हैं:
TOP BUTTONS
TEXT
BOTTOM TAB BAR
और हम चाहते हैं कि TEXT कभी भी TOP BUTTONS के नीचे न दिखाई दे, लेकिन हम चाहते हैं कि टेक्स्ट BOTTOM TAB BAR के नीचे दिखाई दे और फिर भी स्क्रॉलिंग की अनुमति दे ताकि हम BOTTOM TAB BAR के तहत पारदर्शी रूप से बैठे हुए टेक्स्ट को अपडेट कर सकें।
फिर हम टॉप बॉटन्स से नीचे होने के लिए शीर्ष मूल सेट करेंगे, और बॉटम टैब बार के नीचे को शामिल करने के लिए ऊंचाई। BOTTOM TAB BAR सामग्री के नीचे बैठे पाठ तक पहुँच प्राप्त करने के लिए हम नीचे दिए गए इनसेट को BOTTOM TAB BAR की ऊँचाई पर सेट करेंगे।
इनसेट के बिना, स्क्रोलर आपको उस सामग्री को स्क्रॉल करने की अनुमति नहीं देगा, जिसमें वह टाइप कर सके। इनसेट के साथ, यह ऐसा है जैसे सामग्री में अतिरिक्त "BLANK CONTENT" सामग्री इनसेट का आकार होता है। ब्लैंक टेक्स्ट वास्तविक "कंटेंट" में "इनसेट" रहा है - इस तरह से मैं कॉन्सेप्ट को याद करता हूं।
इसका उपयोग पैडिंग जोड़ने के लिए किया जाता है UIScrollView
इसके बिना contentInset
, तालिका दृश्य इस प्रकार है:
फिर सेट करें contentInset
:
tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
प्रभाव नीचे दिया गया है:
लगता है बेहतर है, है ना?
और मैं अध्ययन करने के लिए एक ब्लॉग लिखता हूं contentInset
, आलोचना का स्वागत है।
बड़ा सवाल है।
निम्नलिखित उदाहरण पर विचार करें ( scroller
एक UIScrollView है):
float offset = 1000;
[super viewDidLoad];
for (int i=0;i<500; i++) {
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(i * 100, 50, 95, 100)] autorelease];
[label setText:[NSString stringWithFormat:@"label %d",i]];
[self.scroller addSubview:label];
[self.scroller setContentSize:CGSizeMake(self.view.frame.size.width * 2 + offset, 0)];
[self.scroller setContentInset:UIEdgeInsetsMake(0, -offset, 0, 0)];
}
इनसेट आपके द्वारा अपने कंटोलर को उस सामग्री पर "विंडो" रखने के लिए बाध्य करने का एकमात्र तरीका है, जहां आप इसे चाहते हैं। मैं अभी भी इस नमूना कोड के साथ खिलवाड़ कर रहा हूं, लेकिन विचार यह है: अपने "विंडो" पाने के लिए इनसेट का उपयोग करें UIScrollView
।