UITableView में कोशिकाओं से पहले खाली स्थान निकालें


172

मैं वर्तमान में एक डालने की कोशिश कर रहा हूँ UITableView में अपने दृश्य नियंत्रक के शीर्ष के बजाय एक अलग स्थान हूं। इस के साथ कहा, यह नेविगेशन बार के लिए शीर्ष लेख में शीर्ष लेख जोड़ने की कोशिश कर रहा है, लेकिन इसकी जरूरत नहीं है क्योंकि मेरे पास मेरे नियंत्रक के शीर्ष पर नहीं है।

अगर मैं UITableViewकोशिकाओं के शीर्ष बाएं कोने में रखूं जहां मैं चाहता हूं कि यह कोशिकाएं वहां न डालें:

अब, अगर मैं सिर्फ टेबल व्यू को ऊपर ले जाता हूं तो कोशिकाएं सही जगह पर हैं, तो मुझे एक अलग समस्या आती है - स्क्रॉल करते समय कोशिकाओं को वहां तक ​​ले जाया जा सकता है (यह नेविगेशन नियंत्रक के ऊपर मेरी उंगली के साथ है):

जब मैं जाने देता हूं, हां - कोशिकाएं खोज पट्टी के ठीक नीचे जाएंगी, लेकिन यह स्पष्ट रूप से एक समस्या है कि आप उन्हें इसके ऊपर कैसे ला सकते हैं।

मैं ऐसा कैसे कर पाऊंगा? क्या कोई आसान तरीका है?

जवाबों:


378

UITableViewजब आप नीचे स्क्रॉल करते हैं तो रिक्त स्थान पर शो की कोशिकाएँ होती हैं?

यदि ऐसा है, तो समस्या वह इनसेट हो सकती है जिसे जोड़ा जाता है UITableView गए नेविगेशन कंट्रोलर वजह से । जब कोई स्क्रॉल नहीं हुआ है तब सामग्री को नेविगेशन बार के नीचे रखने के लिए तालिका दृश्य में जोड़ा जाता है। जब तालिका स्क्रॉल की जाती है, तो सामग्री एक पारदर्शी नेविगेशन बार के तहत स्क्रॉल और दिखाती है। यह व्यवहार निश्चित रूप से केवल तभी चाहता था जब टेबल दृश्य सीधे नेविगेशन बार के नीचे शुरू होता है, जो यहां नहीं है।

ध्यान देने वाली एक और बात यह है कि iOS सामग्री पदानुक्रम को केवल दृश्य पदानुक्रम में पहले दृश्य के लिए समायोजित करता है यदि यह है UIScrollViewया यह वंशज (जैसे ) UITableViewऔर है UICollectionView। यदि आपके दृश्य पदानुक्रम में कई स्क्रॉल दृश्य शामिल हैं,automaticallyAdjustsScrollViewInsets तो केवल पहले एक के लिए समायोजन किया जाएगा।

इस व्यवहार को कैसे बदला जाए:

a) इंटरफ़ेस बिल्डर

  • दृश्य नियंत्रक का चयन करें
  • ओपन इंस्पेक्टर इंस्पेक्टर
  • आईबी के विशेषता निरीक्षक (जब एक दृश्य नियंत्रक चुना जाता है) में "एडजस्ट स्क्रॉल व्यू इनसेट" नामक एक संपत्ति होती है जो डिफ़ॉल्ट रूप से चालू होती है। इस विकल्प को अनचेक करें:


    ( धीरज डी की छवि सौजन्य )

मुझे यकीन नहीं है कि कौन सा Xcode संस्करण इस विकल्प को पेश करता है (इसे रिलीज़ नोट्स में स्थान नहीं दिया गया है), लेकिन यह कम से कम 5.1.1 संस्करण में उपलब्ध है।

संपादित करें: भ्रम से बचने के लिए, टिप्पणियों में उल्लिखित यह तीसरा विकल्प था

बी) प्रोग्रामेटिक रूप से

इसे इसे जोड़ें viewDidLoad( स्लाव पेटकोवस्की के जवाब और क्रिस आर की टिप्पणी का श्रेय )

// Objective-C
self.automaticallyAdjustsScrollViewInsets = NO;

// Swift
self.automaticallyAdjustsScrollViewInsets = false

ग) यह पुराने स्कूली छात्रों के लिए प्रासंगिक हो सकता है

आप इसे जोड़कर ठीक कर सकते हैं

tableView.contentInset = UIEdgeInsetsZero

//Swift 3 Change
tableView.contentInset = UIEdgeInsets.zero

या यदि आप आईबी का उपयोग कर रहे हैं और यदि नेविगेशन बार पारदर्शी नहीं है (तो स्क्रीनशॉट से नहीं बता सकते)

  • दृश्य नियंत्रक का चयन करें
  • ओपन इंस्पेक्टर इंस्पेक्टर
  • नियंत्रक विकल्पों में दृश्य किनारों को बढ़ाएँ "शीर्ष बार्स के तहत" का चयन रद्द करें

2
UIView पर "अंडर टॉप बार्स" का चयन करना मेरे लिए ठीक रहा। धन्यवाद।
एंड्रियास ऑवरलैंड

मैं पागल हो रहा था "पेजिंग सक्षम" और पूरे सेल के बजाय केवल नेविगेशन बार की ऊंचाई से शिफ्टिंग का उपयोग करके। धन्यवाद।
लॉर्डपर्सले

8
तीसरा विकल्प: "स्क्रॉल स्क्रॉल इनसेट समायोजित करें" को अचयनित करें - एक आकर्षण की तरह काम किया। धन्यवाद lekksi!
Stas ज़ुकोवसकीय

2
self.automaticallyAdjustsScrollViewInsets = स्विफ्ट "डी पेलोस" में काम करने में झूठा!
संकट आर

1
धन्यवाद सेटिंग UIEdgeInsetsZero की आवश्यकता होती है यदि एक नई तालिका नियंत्रक में किसी तालिका को हर बार दिखाए जाने पर अन्यथा उसके समान सफेद अंतराल दिखाई देता है और बड़ा और बड़ा हो जाता है।
मल्हल

71

मुझे भी यही समस्या थी और मुझे पूरा यकीन है कि मुझे एक समय में एक UIView था। बस संपूर्ण तालिका दृश्य की प्रतिलिपि बनाना, उसे हटाना, और उसे चिपकाना फिर से मेरे लिए निर्धारित किया गया।


7
यह वास्तव में वास्तव में अजीब है। इससे समस्या हल हो गई। ऐसा होने पर कोई विचार?
MiQUEL

मुझे लगता है कि आप 10 अक्टूबर से मेरे जवाब का पालन करके इसे बहुत आसान हल कर सकते हैं
netshark1000

एक ही मुद्दा था। इसे हटाना और पढ़ना मेरे लिए भी काम आया।
sma

3
जहां तक ​​मुझे पता है, स्क्रॉल व्यू कंटेंट इनसेट्स स्वचालित रूप से समायोजित हो जाते हैं (यदि स्वचालित रूप से AdAdjustsSrollViewInsets = YES, जो कि यह डिफ़ॉल्ट रूप से है) केवल तभी स्क्रॉल व्यू व्यू कंट्रोलर व्यू पदानुक्रम में पहला बच्चा है। मेरा अनुमान है कि यह समाधान काम करता है क्योंकि तालिका दृश्य को कॉपी-पेस्ट करने के बाद यह दृश्य पदानुक्रम में पहला दृश्य नहीं है।
lekksi

क्या होता है कि जब tableView पहली चीज है जिसे आप दृश्य में जोड़ते हैं, तो सिस्टम सोचता है कि उसे नेविगेशन के लिए कमरा छोड़ना होगा। मेरा अनुमान यहाँ है कि कुछ लोग tableView और फिर शीर्षलेख दृश्य जोड़ते हैं। कुछ मुद्दों के बाद, वे तब tableView को हटाते हैं और इसे फिर से जोड़ते हैं, फिर क्या होता है शीर्षलेख दृश्य पदानुक्रम पर पहली चीज़ है, इसलिए सिस्टम को अब और अनुकूल नहीं करना पड़ता है, समस्या हल हो गई है। मुझे पता है क्योंकि मैं केवल कोड का उपयोग करता हूं, इसलिए मेरे मामले में पहले हेडर और फिर इसे ठीक करने के लिए तालिका को जोड़ना था।
लूलिस जेरार्ड

40

अपने स्टोरीबोर्ड में तालिका का चयन करें और यह सुनिश्चित करें कि शैली "सादे" पर सेट की गई है, बजाय "समूहीकृत"। आप इस सेटिंग को इंस्पेक्टर टैब में पा सकते हैं।


अद्भुत .. यह अजीब तरह से मेरे लिए समाधान था .. मैंने अभी पूरे व्यू कंट्रोलर को कॉपी किया और पेस्ट किया लेकिन किसी तरह इस पेस्ट व्यू कंट्रोलर की टेबल व्यू में अजीब अजीब ऑफसेट था। इस उत्तर ने मेरी समस्या हल कर दी
daisura99

इससे समस्या हल हो गई लेकिन अब हेडर अनुभाग अलग तरीके से व्यवहार करते हैं। किसी को?
ब्रूनो मुनिज़

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

9

मेरे मामले में मुझे पदानुक्रम में UITableView के तहत एक UILabel था।

मैंने इसे "आगे" स्थानांतरित किया और रिक्त स्थान दिखाई दिया। निश्चित रूप से क्यों नहीं, लेकिन यह इस तरह से काम करता है, अगर टेबल व्यू के तहत कुछ भी काम करता है, तो यह रिक्त स्थान को छुपाता है।

इसके अलावा आप स्टोरीबोर्ड पर अपने व्यू कंट्रोलर इंस्पेक्टर पर "एडजस्ट स्क्रॉल व्यू इनसेट्स" चेक / अनचेक करने की कोशिश कर सकते हैं।

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


2
मेरे पास एक समूहीकृत UITableView है और "एडिट स्क्रॉल व्यू इनसेट्स" को अनचेक करने का काम किया है।
मैट

5

उपरोक्त किसी ने मेरी मदद नहीं की। लेकिन ऐसा करने से मदद मिली :

self.tableView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0)

'-64' के बजाय आप अपने नेविगेशन बार की ऊंचाई के आधार पर कोई अन्य नंबर डाल सकते हैं।


4

पूर्व-जोड़ा जा सकता है UIRefreshControl। मुझे इस तरह से कोड की समस्या है:

self.refreshControl = [[UIRefreshControl alloc] init];{
    [self.refreshControl setAttributedTitle:[[NSAttributedString alloc]
                                             initWithString:@"Your string"]];
    [self.refreshControl addTarget:self
                            action:@selector(updateScreen)
                  forControlEvents:UIControlEventValueChanged];

}

जैसा कि आप देखते हैं, मैं self.refreshControllerतुरंत बाद सेट करता हूंinit

लेकिन, यदि आप refreshControlसेटअप के बाद सेट करते हैं, तो टॉप-स्पेस आपको बाधित नहीं करता है।

UIRefreshControl *refreshControl  = [[UIRefreshControl alloc] init];{
    [self.refreshControl setAttributedTitle:[[NSAttributedString alloc]
                                             initWithString:@"Your String"]];
    [self.refreshControl addTarget:self
                            action:@selector(updateScreen)
                  forControlEvents:UIControlEventValueChanged];
    self.refreshControl = refreshControl;
}

मैं विश्वास नहीं कर सकता कि यह वास्तविक समस्या थी। यह मेरे लिए केवल एक मुद्दा है <= 9.3.5 पर। दुनिया में आपने इसका कैसे पता लगाया?
सायरन

4

यदि आप iOS 11 पर ऐसा कर रहे हैं, तो स्वचालित रूप से AdAdsscrollViewInsets काम नहीं करेगा क्योंकि यह पदावनत है, इस पोस्ट में दिए गए उत्तर के अनुसार निम्नलिखित कोड ने मेरे लिए काम किया: https://stackoverflow.com/a/44391269-5476481

        if #available(iOS 11.0, *) {
            tblView.contentInsetAdjustmentBehavior = .never
        } else {
            automaticallyAdjustsScrollViewInsets = false
        }

उम्मीद है की यह मदद करेगा।



3

मैं निश्चित रूप से नहीं कह सकता, लेकिन ऐसा लगता है कि आपने एक अतिरिक्त UIView प्राप्त कर लिया है, जहां प्रोटोटाइप सेल शुरू होते हैं और UITableView के शीर्ष होते हैं। यदि आप मेरे द्वारा जोड़े गए पाठ / लाइनों को हटाते हैं तो मेरी छवि बिल्कुल आपकी तरह दिखती है।

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


3

मुझे अभी भी यकीन नहीं है कि शीर्ष पर उस अतिरिक्त स्थान का क्या कारण है, लेकिन मैंने पाया कि यूआईटेबल व्यू को अंतरिक्ष से हटा दिया है और इसे एक नए के साथ बदलकर अंतरिक्ष को दूर ले गया है।

मैंने गलती से वहाँ एक यूआईईवीवाई को खींच लिया होगा, लेकिन मैं इसे नहीं चुन सकता था इसलिए मैं हटा नहीं सकता था।


3

स्विफ्ट 5

TableHeaderView और tableFooterView को हटाने का प्रयास करें

var frame = CGRect.zero
frame.size.height = .leastNormalMagnitude
tblView.tableHeaderView = UIView(frame: frame)
tblView.tableFooterView = UIView(frame: frame)

2

स्टोरीबोर्ड या xib में अपने टेबलव्यू फ्रेम की जाँच करें। डिफ़ॉल्ट रूप से माइन की आयु स्थिति मान है, इसलिए बग


2

मेरे आवेदन में भी मैंने इस तरह की समस्या का अनुभव किया है। मैंने tableView शून्य के शीर्ष एज इनसेट को सेट किया है। इसके अलावा सेट की कोशिश की falseके लिएautomaticallyAdjustsScrollViewInsets । लेकिन काम नहीं किया।

अंत में मुझे काम करने का हल मिल गया। मुझे नहीं पता कि यह सही तरीका है। लेकिन heightForHeaderInSectionप्रतिनिधि पद्धति को लागू करना मेरे लिए काम कर गया। आपको इसे काम करने के लिए एक गैर-शून्य मान वापस करना होगा (वापसी शून्य पहले की तरह ही स्थान प्रदर्शित करेगा)।

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {

    return 0.1
}

2

2017 में, मेरे लिए जो काम कर रहा है, वह केवल यह एक पंक्ति है

नेवीगेशन कंट्रोलर ?navigationBar.isTranslucent = false

मुझे पता नहीं क्यों यह भी प्रभावित करेगा। शायद कोई समझा सकता है। लेकिन मुझे पूरा यकीन है कि यही वह जवाब होगा, जिसकी तलाश ज्यादातर लोग करेंगे।


यही मेरे लिए भी किया। धन्यवाद!
स्केरियोनी

2

IOS 11 और इसके बाद के संस्करण में, Apple ने सामग्री इनसेट को समायोजित करने के लिए संपत्ति बदल दी है। का प्रयोग करें contentInsetAdjustmentBehaviorऔर सेट .neverसे ऊपर अतिरिक्त स्थान को हटाने के लिए UICollectionView, UIScrollView, UITableView

if #available(iOS 11.0, *) {

    // For scroll view
    self.scrollView.contentInsetAdjustmentBehavior = .never

    // For collection view
    self.collectionView.contentInsetAdjustmentBehavior = .never

    // For table view
    self.tableView.contentInsetAdjustmentBehavior = .never

} else {
    self.automaticallyAdjustsScrollViewInsets = false
}

उम्मीद है इससे आपको मदद मिलेगी।


1

खैर मेरे लिए समस्या तब हुई जब मैंने मेन्यू से एक प्रोटोटाइप सेल को टेबल व्यू में खींच लिया। इसलिए मैंने उसे हटा दिया और सिर्फ प्रोटोटाइप सेल को टेबल व्यू इंस्पेक्टर के गुणों में से 1 पर सेट कर दिया


1

मैं यह प्रोग्रामेटिक रूप से कर रहा हूँ, और मैंने अपने सभी अन्य सबव्यूज़ को जोड़ने के बाद अपने AddSubview (tableView) को नीचे की ओर ले गया, और इसने मेरी समस्या हल कर दी!

यह सुनिश्चित नहीं है कि यह केवल डिवाइस पर दिखाई देता है और मेरे सिम्युलेटर पर नहीं, लेकिन किसी भी तरह से कम से कम एक सरल समाधान है!


1

जब तक UITableView व्यू कंट्रोलर का पहला सबव्यू नहीं होगा, तब तक खाली जगह दिखाई नहीं देगी।

समाधान: एक छुपी हुई / स्पष्ट दृश्य वस्तु जोड़ें (दृश्य, लेबल, बटन, आदि) दृश्य नियंत्रक के पहले उप-भाग के रूप में (UITableView के समान स्तर पर लेकिन इससे पहले)।


मैंने बहुत समय बिताया है ताकि यह पता लगाने की कोशिश कर रहा हूं, यहां और अन्य पदों पर कई सुझावों की कोशिश कर रहा हूं। यह वह है जिसने इसे हल किया है। धन्यवाद! क्या आप समझा सकते हैं कि हालांकि कुछ डॉक्स के लिए लिंक क्यों या पोस्ट किया गया है? मैं सिर्फ iOS देव सीख रहा हूँ और यह Android की तुलना में बहुत अलग है! :)
मार्क

0

UIView को टेबल के ऊपर और नीचे (ड्रैग एंड ड्रॉप) में डाला जा सकता है। उनके गुणों को पारदर्शी और 1 पीएक्स की ऊंचाई के रूप में सेट करें। यह कोशिकाओं के सामने अतिरिक्त गद्दी को हटाने के लिए है।


0

मुझे भी यह समस्या थी कि पटल व्यू पदानुक्रम में अंतिम दृश्य नहीं था। मेरे मामले में मुझे ऊपर एक दृश्य था (भले ही वे एक दूसरे को ओवरलैप नहीं कर रहे थे), इसलिए मैंने इसे पदानुक्रम में टेबल व्यू के ऊपर खींच लिया और इसे बनाया।


0

मुझे बस इसके लिए एक समाधान मिला।

बस टेबलव्यू और क्लिक एडिटर चुनें -> व्यवस्थित करें -> फ्रंट पर भेजें

इसने मेरे लिए काम किया और आशा है कि यह आप सभी की मदद करेगा।


0

मेरे मामले में, मैं कन्टेनरव्यूकंट्रोलर का उपयोग कर रहा था और इसमें यूआईटेबल व्यू कोंट्रोलर डाल रहा था। कन्टेनरव्यूकंट्रोलर को हटाने के बाद। मुद्दे दूर हो जाते हैं।


0

Xcode 8 बग…

यदि आपके स्टोरीबोर्ड UITableView शैली को प्लेन पर सेट किया गया है, तो पहले यह प्रयास करें।

तालिका की शैली को समूहीकृत पर सेट करें और फिर वापस मैदान में ले जाएं। इसने मेरे यूआईटेबल व्यू के प्रमुख पर मेरे ऐप में स्थान हटा दिया।


0

मेरे मामले में मैं एक कंटेनर दृश्य का उपयोग कर रहा था। (मुख्य दृश्य -> ​​कंटनेर दृश्य -> ​​UITableView)

मुझे लगता है कि शीर्ष पर अतिरिक्त स्थान, डिवाइस अधिसूचना बार के स्थान की तरह है (जहां समय प्रदर्शित होता है, बैटरी)। मैं वास्तव में करता हूं, यह कोई धारणा नहीं है।

मैंने क्या किया था यूआई बिल्डर से:

  • तालिका व्यू कंट्रोलर को पूरा चुनें
  • ओपन इंस्पेक्टर इंस्पेक्टर
  • पर जाएं -> नियंत्रक देखें -> लेआउट -> "पूर्ण स्क्रीन का चयन करें"

0

आप इस कोड को viewDidLoad या viewDidAppear में उपयोग कर सकते हैं जहाँ आपकी तालिका बनाई जा रही है:

// Remove blank space on header of table view
 videoListUITableView.contentInset = UIEdgeInsetsZero;

// The iOS device = iPhone or iPod Touch
CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;

// Set the height of the table on the basis of number of rows
videoListUITableView.frame = CGRectMake(videoListUITableView.frame.origin.x, videoListUITableView.frame.origin.y, videoListUITableView.frame.size.width, iOSDeviceScreenSize.height-100);



// Hide those cell which doesn't contain any kind of data
self.videoListUITableView.tableFooterView = [[UIView alloc] init];


0

स्टोरीबोर्ड में ViewController के विस्तारित किनारों को सेट करें ताकि underTopBarसंपत्ति अनियंत्रित हो।


0

एक ही मुद्दा रहा था। मैंने viewDidLoad में निम्न जोड़कर इसे हल किया।

self.extendedLayoutIncludesOpaqueBars = true


-2

के लिए जाँचे

if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
    [tableView setSeparatorInset:UIEdgeInsetsZero];
}
  • उल्लेख टेबलव्यू प्रतिनिधि समारोह सेलForRowAtIndexPath:
  • यह ios 6 और 7 दोनों को संभाला जा सकता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.