UIScrollView contentInset संपत्ति के लिए क्या है?


158

क्या कोई मुझे समझा सकता है कि UIScrollViewउदाहरण में contentInset संपत्ति का उपयोग किस लिए किया जाता है? और शायद एक उदाहरण प्रदान करें?

जवाबों:


240

यह सामग्री दृश्य और संलग्नक स्क्रॉल दृश्य के बीच इनसेट की दूरी निर्धारित करता है।

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)

स्क्रॉल दृश्य निर्दिष्ट सामग्री इनसेट द्वारा प्रदान किए जाने वाले सामग्री दृश्य प्लस को जोड़ता है।


यह तो UIScrollView के लिए एक गद्दी जोड़ने के लिए प्रयोग किया जाता है? यदि नहीं तो आप मुझे एक व्यावहारिक उदाहरण दे सकते हैं। मेरी समस्या यह नहीं है कि इसे कैसे लागू किया जाए बल्कि इसे कब लागू किया जाए।
ForeignerBR

28
हां, यह स्क्रॉल दृश्य के अंदर की सामग्री को पैड करता है। यह सीएसएस paddingसंपत्ति के समान है ।
मार्क डब्ल्यू

इस पर पिग्गीबैक के लिए क्षमा करें, मैं इसे अपना प्रश्न बना सकता हूं, लेकिन इसके आधार पर, यदि आप प्रत्येक सामग्री को सेट करते हैं तो वास्तव में क्या होता है। उदाहरण के लिए कंटेंटहाइट के अलावा 0 मूल्य? क्या वह संपूर्ण स्क्रॉलविले को उस ऊँचाई के लिए बाध्य करता है जिसे आप इसे सेट करते हैं?
जेकव

@jakev नहीं, .frame संपत्ति माता-पिता के भीतर स्क्रॉलव्यू के आयामों को नियंत्रित करती है (यह उत्तर देखें: stackoverflow.com/questions/5361369/… )। सभी पक्षों के लिए कंटेंटइनेट्स को 0 पर सेट करने का सीधा सा मतलब है कि कंटेंट स्क्रोलव्यू के भीतर बिल्कुल भी गद्देदार नहीं होगा। इसलिए जब आप शीर्ष पर स्क्रॉल करते हैं, तो सामग्री स्क्रॉलव्यू के शीर्ष के ठीक सामने बैठी होती है। यदि आप नीचे तक स्क्रॉल करते हैं, तो सामग्री स्क्रोलव्यू के निचले भाग तक पहुंच जाती है।
जेरेमी विएबे

क्या यह संभव है कि सामग्री को हमेशा रखें जब स्क्रॉलिंग हमेशा स्क्रॉल करने के लिए मेरिन को टॉप (कॉन्टेनसेट) में
रखे

86

जबकि 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 पर बिल्ड-इन फोटोज ऐप देखें। नेविगेशन बार और स्थिति पट्टी पारदर्शी हैं, और स्क्रॉल दृश्य की सामग्री नीचे दिखाई दे रही है। ऐसा इसलिए है क्योंकि स्क्रॉल दृश्य का फ्रेम उस तक फैला हुआ है। लेकिन अगर यह सामग्री इनसेट के लिए नहीं था, तो आप कभी भी उस पारदर्शी नेविगेशन बार को स्पष्ट नहीं कर पाएंगे, जब आप शीर्ष पर जाते हैं।


यहाँ अच्छी बात यह है कि आप "स्क्रॉल अंडर स्टेटस बार विथ ब्लर" इफ़ेक्ट बनाने के लिए इनसेट का उपयोग कर सकते हैं।
ऐय

फ़ोटो ऐप के बारे में उदाहरण समझना आसान था।
अभिमुरलीधरन

8

कंटेंट इनसेट्स यूजर इंटरफेस के अन्य हिस्सों के नीचे जाने वाली सामग्री को हल करने की समस्या को हल करते हैं और फिर भी स्क्रॉल बार का उपयोग करते हुए अभी भी उपलब्ध हैं। दूसरे शब्दों में, सामग्री इनसेट का उद्देश्य इंटरैक्शन क्षेत्र को उसके वास्तविक क्षेत्र से छोटा बनाना है।

उस मामले पर विचार करें जहां हमारे पास स्क्रीन के तीन तार्किक क्षेत्र हैं:

TOP BUTTONS

TEXT

BOTTOM TAB BAR

और हम चाहते हैं कि TEXT कभी भी TOP BUTTONS के नीचे न दिखाई दे, लेकिन हम चाहते हैं कि टेक्स्ट BOTTOM TAB BAR के नीचे दिखाई दे और फिर भी स्क्रॉलिंग की अनुमति दे ताकि हम BOTTOM TAB BAR के तहत पारदर्शी रूप से बैठे हुए टेक्स्ट को अपडेट कर सकें।

फिर हम टॉप बॉटन्स से नीचे होने के लिए शीर्ष मूल सेट करेंगे, और बॉटम टैब बार के नीचे को शामिल करने के लिए ऊंचाई। BOTTOM TAB BAR सामग्री के नीचे बैठे पाठ तक पहुँच प्राप्त करने के लिए हम नीचे दिए गए इनसेट को BOTTOM TAB BAR की ऊँचाई पर सेट करेंगे।

इनसेट के बिना, स्क्रोलर आपको उस सामग्री को स्क्रॉल करने की अनुमति नहीं देगा, जिसमें वह टाइप कर सके। इनसेट के साथ, यह ऐसा है जैसे सामग्री में अतिरिक्त "BLANK CONTENT" सामग्री इनसेट का आकार होता है। ब्लैंक टेक्स्ट वास्तविक "कंटेंट" में "इनसेट" रहा है - इस तरह से मैं कॉन्सेप्ट को याद करता हूं।


4

इसका उपयोग पैडिंग जोड़ने के लिए किया जाता है UIScrollView

इसके बिना contentInset, तालिका दृश्य इस प्रकार है:

यहां छवि विवरण दर्ज करें

फिर सेट करें contentInset:

tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)

प्रभाव नीचे दिया गया है:

यहां छवि विवरण दर्ज करें

लगता है बेहतर है, है ना?

और मैं अध्ययन करने के लिए एक ब्लॉग लिखता हूं contentInset, आलोचना का स्वागत है।


2

बड़ा सवाल है।

निम्नलिखित उदाहरण पर विचार करें ( 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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.