UITableView के नीचे के अतिरिक्त विभाजकों को हटा दें


714

जब मैंने 4 पंक्तियों के साथ तालिका दृश्य सेट किया, तो अभी भी भरी हुई पंक्तियों के नीचे अतिरिक्त विभाजक रेखाएं (या अतिरिक्त रिक्त कोशिकाएं) हैं।

मैं इन कोशिकाओं को कैसे हटाऊंगा?

UITableView में अतिरिक्त विभाजक लाइनों के लिए छवि

जवाबों:


1505

इंटरफ़ेस बिल्डर (iOS 9+)

बस एक UIView को टेबल पर खींचें। स्टोरीबोर्ड में, यह आपकी कस्टम कोशिकाओं के नीचे सबसे ऊपर बैठेगा। आप इसे "पाद" नाम देना पसंद कर सकते हैं।

यहाँ यह स्पष्टता के लिए हरे रंग में दिखाया गया है, आप शायद स्पष्ट रंग चाहते हैं।

ध्यान दें कि ऊंचाई को समायोजित करके, आप प्रभावित कर सकते हैं कि तालिका के "नीचे उछाल" को कैसे नियंत्रित किया जाता है, जैसा कि आप पसंद करते हैं। (ऊँचाई शून्य आमतौर पर ठीक है)।

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


यह प्रोग्राम करने के लिए:

तीव्र

override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.tableFooterView = UIView()
}

उद्देश्य सी

iOS 6.1+

- (void)viewDidLoad 
{
    [super viewDidLoad];

    // This will remove extra separators from tableview
    self.tableView.tableFooterView = [UIView new];
}

या यदि आप चाहें,

    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

ऐतिहासिक रूप से iOS में:

तालिका दृश्य नियंत्रक में जोड़ें ...

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
     // This will create a "invisible" footer
     return CGFLOAT_MIN;
 }

और यदि आवश्यक हो ...

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{        
    return [UIView new];

    // If you are not using ARC:
    // return [[UIView new] autorelease];
}

मुझे लगता है कि आपके विवरण और आपका कोड उलट है। वैसे भी, यह मेरे लिए बहुत अच्छा काम किया। मैं केवल समूहीकृत तालिकाओं के साथ "वास्तविक" पाद का उपयोग करता हूं, इसलिए मैंने आपके कोड के आसपास (tableView.style! = UITableViewStyleGrouped) {} ​​जोड़ दिया। अब मेरी सभी गैर-समूहित तालिकाएँ अपनी अतिरिक्त कोशिकाओं को खो देती हैं, जबकि मेरी समूहीकृत तालिकाएँ अप्रभावित हैं।
अर्लोमेडिया

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

4
@ मैथ्यू यह काम करेगा क्योंकि अगर टेबल में कस्टम पाद है तो यह टेबलव्यू भरने के लिए "फंतासी" पंक्तियों को नहीं बनाएगा। तो आप पाद के रूप में उपयोग किए जाने के लिए एक खाली दृश्य बनाएंगे और ऊँचाई को 0 के पास सेट करेंगे (यह शून्य नहीं हो सकता है या iOS इसे रेंडर नहीं करेगा)। इस सरल चाल से आप डिफ़ॉल्ट व्यवहार को बदल देंगे।
जे। कोस्टा

2
@ j.Costa: आपका समाधान केवल एक बार काम करेगा, जबकि uitableview द्वारा बनाया गया। अंतिम सेल पर क्लिक करने के बाद आपका समाधान अधिक अच्छा नहीं है। कृपया अपना उत्तर सुधारें।

3
tableFooterViewपंक्ति में अंतिम सेल पर एक विभाजक का उपयोग करते हुए , क्योंकि तालिका अभी भी उस सेल के नीचे की सामग्री का अनुमान लगाती है। ऐतिहासिक तरीके का उपयोग करने से उस अंतिम विभाजक को खत्म कर दिया जाएगा और समग्र रूप से बेहतर दिखाई देगा।
जेम्स कुआंग

128

यहां एक और तरीका है कि समूहीकृत टेबल शैली को डब्ल्यू / आउट किया जाए, और एक जिसे आप अनुमान नहीं करेंगे। तालिका में शीर्षलेख और पाद लेख जोड़ना (शायद एक या दूसरे उपद्रव, जाँच नहीं की गई) विभाजकों को भराव / रिक्त पंक्तियों से गायब करने का कारण बनता है।

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

- (void) addHeaderAndFooter
{
    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
    v.backgroundColor = [UIColor clearColor];
    [self.myTableView setTableHeaderView:v];
    [self.myTableView setTableFooterView:v];
    [v release];
}

@Casebash के जवाब में, मैं अपने ऐप ("AcmeLists" सूची प्रबंधक को आईट्यून्स स्टोर में ...) कोड में वापस चला गया और सत्यापित करने के लिए addHeaderAndFooter विधि को शॉर्ट-सर्कुलेट किया। इसके बिना , मेरे पास अतिरिक्त पंक्ति विभाजक हैं; कोड के साथ, मेरे पास इस विंडो स्नैप में जो कुछ भी दिखाई देता है: कोई तालिका पंक्ति विभाजक चित्र नहीं है । तो मुझे यकीन नहीं है कि यह आपके लिए काम क्यों नहीं करेगा। इसके अलावा, यह मेरे लिए समझ में आता है कि किसी टेबल व्यू पर कोई कस्टम फूटर रखने के लिए जरूरी है कि इसके नीचे की खाली पंक्तियों के लिए पंक्ति विभाजकों को खींचना बंद करना होगा। यह बात छिपी होगी। संदर्भ के लिए, मैंने उन तालिकाओं को देखा जहां स्क्रीन पर देखे जाने की तुलना में अधिक पंक्तियाँ थीं, और फिर दो पंक्तियों वाली तालिका के लिए। दोनों मामलों में, कोई बाहरी विभाजक नहीं है।

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


1
आप इसे आईबी में भी कर सकते हैं। बस एक UIView tableview के निचले भाग में ऊंचाई 1. पर खींचें और सेट
Ortwin Gentz

70

स्विफ्ट में UITableView में खाली पंक्तियों के लिए अतिरिक्त विभाजक रेखाओं को हटाना

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    self.yourTableview.tableFooterView = UIView()
}

34

मैं wkw उत्तर का विस्तार करना चाहूंगा :

केवल ऊँचाई 0 के साथ केवल पाद लेख जोड़ने से चाल चलेगी। (एसडीके 4.2, 4.4.1 पर परीक्षण किया गया)

- (void) addFooter
{
    UIView *v = [[UIView alloc] initWithFrame:CGRectZero];

    [self.myTableView setTableFooterView:v];
}

या इससे भी सरल - जहां आपने अपना टेबलव्यू सेट किया है, इस लाइन को जोड़ें:

//change height value if extra space is needed at the bottom.
[_tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)]];

या यहां तक ​​कि सरल - किसी भी विभाजक को हटाने के लिए:

[_tableView setTableFooterView:[UIView new]];

धन्यवाद फिर से wkw करने के लिए :)


यह सही उत्तर है, अन्य विधियों में coz अंतिम पंक्ति में बिना किसी लाइन विभाजक के बना रहता है
अंकुश

22

IOS 7+ के लिए स्टोरीबोर्ड का उपयोग

बस पाद के रूप UIViewमें अपने में खींचें UITableView। पाद दृश्य की ऊँचाई ० पर सेट करें।


18

इसे इस्तेमाल करे। इसने मेरे लिए काम किया:

- (void) viewDidLoad
{
  [super viewDidLoad];

  // Without ARC
  //self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];

  // With ARC, tried on Xcode 5
  self.tableView.tableFooterView = [UIView new];
}


11

यदि आप स्विफ्ट का उपयोग कर रहे हैं, तो टेबलव्यू को प्रबंधित करने वाले कंट्रोलर के देखने के लिए निम्न कोड जोड़ें :

override func viewDidLoad() {
    super.viewDidLoad()

    //...

    // Remove extra separators
    tableView.tableFooterView = UIView()
}

8

आप अंत में एक खाली पाद लेख जोड़ सकते हैं तो यह खाली कोशिकाओं को छिपा देगा लेकिन यह काफी बदसूरत दिखाई देगा:

tableView.tableFooterView = UIView()

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

एक बेहतर दृष्टिकोण है: तालिका दृश्य के अंत में 1 बिंदु रेखा को पाद के रूप में जोड़ें और खाली कोशिकाओं को भी अब नहीं दिखाया जाएगा।

let footerView = UIView()
footerView.frame = CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1)
footerView.backgroundColor = tableView.separatorColor
tableView.tableFooterView = footerView

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


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

हालाँकि आप पसंद करते हैं। लेकिन मुझे लगता है कि थोथा "न पूरा हुआ" विभाजक काफी बदसूरत लग रहा है।
डार्को


7

जे। कोस्टा के समाधान को आगे बढ़ाना: आप इस कोड की लाइन को लगाकर तालिका में एक वैश्विक परिवर्तन कर सकते हैं:

[[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];

पहला संभव तरीका (आमतौर पर AppDelegate: इन application:didFinishLaunchingWithOptions:) विधि के अंदर।


2
इस एक के साथ सावधान रहें, ऐसे मामले हैं जहां आपके इच्छित पाद को ओवरराइड किया जा सकता है और आप अपनी पवित्रता पर सवाल उठाते हुए एक या दो दिन बिताएंगे। इसके अलावा, tableFooterView UI_APPEARANCE_SELECTOR के साथ चिह्नित नहीं है, ताकि वास्तविक व्यवहार किसी भी समय बदल सके।
लेखन

6

मुझे पता है कि इस प्रश्न का उत्तर स्वीकार कर लिया गया है, लेकिन मैंने यहां एक्स्ट्रा सेपरेटर लाइन को कैसे छिपाया जाए इसके लिए अलग-अलग तरीके बताए हैं UITableView

आप tableViewमानक विभाजक रेखा छिपा सकते हैं , और प्रत्येक सेल के शीर्ष पर अपनी कस्टम लाइन जोड़ सकते हैं।

अपडेट करें:

कस्टम विभाजक जोड़ने का सबसे आसान तरीका UIView1px ऊंचाई का सरल जोड़ना है :

UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
separatorLineView.backgroundColor = [UIColor grayColor]; /// may be here is clearColor;
[cell.contentView addSubview:separatorLineView];

या

    self.tblView=[[UITableView alloc] initWithFrame:CGRectMake(0,0,320,370) style:UITableViewStylePlain];
    self.tblView.delegate=self;
    self.tblView.dataSource=self;
    [self.view addSubview:self.tblView];

    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
    v.backgroundColor = [UIColor clearColor];
    [self.tblView setTableHeaderView:v];
    [self.tblView setTableFooterView:v];
    [v release];

या

- (float)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    // This will create a "invisible" footer
    return 0.01f;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    // To "clear" the footer view
    return [[UIView new] autorelease];
}

या सबसे अच्छा और सरल तरीका मुझे पसंद है

self.tableView.tableFooterView = [[UIView alloc] init];

किसी एक की कोशिश करो;


6

आपको इस प्रश्न के बहुत से उत्तर मिल सकते हैं। साथ हेरफेर के आसपास उनमें से अधिकांश UITableViewकी tableFooterViewविशेषता है और इस उचित तरीके से खाली पंक्तियों को छिपाने के लिए है। सुविधा के लिए मैंने सरल एक्सटेंशन बनाया है जो इंटरफ़ेस बिल्डर से खाली पंक्तियों को चालू / बंद करने की अनुमति देता है। आप इसे इस जिस्ट फाइल से देख सकते हैं । मुझे उम्मीद है कि यह आपका थोड़ा सा समय बचा सकता है।

extension UITableView {

  @IBInspectable
  var isEmptyRowsHidden: Bool {
        get {
          return tableFooterView != nil
        }
        set {
          if newValue {
              tableFooterView = UIView(frame: .zero)
          } else {
              tableFooterView = nil
          }
       }
    }
}

उपयोग:

tableView.isEmptyRowsHidden = true

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


5

uitableview अतिरिक्त विभाजक रेखा अतिरिक्त विभाजक रेखाएँ छिपाती हैं जो स्विफ्ट 3.0 में छिपती हैं

 self.tbltableView.tableFooterView = UIView(frame: .zero)

5

यदि आप अंतिम सेल के बाद कोई विभाजक नहीं चाहते हैं, तो आपको अपने पाद के लिए करीब शून्य लेकिन गैर-शून्य ऊंचाई की आवश्यकता है।

अपने में UITableViewDelegate:

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}

1
उत्तम! मेरे लिए काम किया !!
एंटनी राफेल


3

बस वांछित विभाजक रंग के साथ एक दृश्य जोड़ें पृष्ठभूमि रंग के रूप में, 100% चौड़ाई, आपके xViewCell के लिए x0 y-1 की स्थिति में 1px ऊंचाई। सुनिश्चित करें कि tableViewCell साक्षात्कार को क्लिप नहीं करता है, इसके बजाय tableView चाहिए।

तो आपको बिना किसी हैक प्रति कोड या आईबी के मौजूदा सेल के बीच एक पूर्ण सरल और काम करने वाला विभाजक मिलता है।

नोट: एक ऊर्ध्वाधर शीर्ष उछाल पर 1 विभाजक दिखाता है, लेकिन यह एक समस्या नहीं होनी चाहिए क्योंकि यह डिफ़ॉल्ट iOS व्यवहार है।


3

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


3

प्रोग्रामटेबल के नीचे से अतिरिक्त विभाजक लाइनों को प्रोग्रामेटिक रूप से समाप्त करने के लिए, बस कोड की दो पंक्तियों के बाद नीचे लिखें और यह इसके साथ अतिरिक्त विभाजक को हटा देगा।

tableView.sectionFooterHeight = 0.f;
tableView.sectionHeaderHeight = 0.f;

यह ट्रिक मेरे लिए हर समय काम करती है, अपने आप को आज़माएं।


2

मेरे पास स्वीकृत उत्तर (iOS 9+, स्विफ्ट 2.2) के एक टुकड़े को लागू करने के लिए कुछ किस्मत थी। मैंने लागू करने की कोशिश की थी:

self.tableView.tableFooterView = UIView(frame: .zero)

हालांकि, मेरे ऊपर कोई प्रभाव नहीं पड़ा tableView- मेरा मानना ​​है कि इसका इस तथ्य से कुछ लेना-देना हो सकता है कि मैं उपयोग कर रहा था UITableViewController

इसके बजाय, मुझे केवल viewForFooterInSectionविधि को ओवरराइड करना पड़ा (मैंने tableFooterViewकहीं और सेट नहीं किया ):

override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    return UIView(frame: .zero)
}

इसने tableViewएकल खंड के साथ काम किया (यदि आपके पास कई खंड हैं, तो आपको अंतिम एक निर्दिष्ट करने की आवश्यकता है)।


2

यदि आपके पास केवल एक ही खंड है, तो सबसे तेज़ और आसान तरीका सिर्फ "दृश्य" से "समूहीकृत" तक तालिका दृश्य शैली निर्धारित करना है। (चित्र देखें)

TableView समूहीकृत

यदि आपके पास अधिक सेक्शन हैं, तो आपको हेडर की ऊँचाई को शून्य पर सेट करने की आवश्यकता हो सकती है (आपके / आपके ग्राहक / आपके प्रोजेक्ट मैनेजर के स्वाद के आधार पर)

यदि आपके पास अधिक अनुभाग हैं, और हेडर के साथ गड़बड़ नहीं करना चाहते हैं (भले ही यह सबसे सरल मामले में सिर्फ एक पंक्ति है), तो आपको एक पाद के रूप में एक यूआईवाईयूवाई सेट करने की आवश्यकता है, क्योंकि यह पिछले उत्तरों में समझाया गया था)


2

स्विफ्ट 4.0 एक्सटेंशन

स्टोरीबोर्ड के लिए बस थोड़ा सा विस्तार:

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

extension UITableView {
    @IBInspectable
    var hideSeparatorForEmptyCells: Bool {
        set {
            tableFooterView = newValue ? UIView() : nil
        }
        get {
            return tableFooterView == nil
        }
    }
}

2

त्वरित और आसान स्विफ्ट 4 रास्ता।

override func viewDidLoad() {
     tableView.tableFooterView = UIView(frame: .zero)
}

यदि आपके पास स्थैतिक कोशिकाएं हैं। आप इंस्पेक्टर विंडो से विभाजक को भी बंद कर सकते हैं। (यह वांछनीय नहीं होगा यदि आपको विभाजक की आवश्यकता है। उस मामले में ऊपर दिखाए गए तरीके का उपयोग करें) इंस्पेक्टर खिड़की


तालिका के लिए एक नया UIView सेट करना। पहले से ही 10 बार उत्तर दिया गया था, क्यों, बेहतर कोड (आप गायब हैं super.viewDidLoad()) के बारे में बेहतर स्पष्टीकरण के साथ और शीर्ष पर विकि उत्तर में शामिल है। सभी विभाजकों को हटाने के लिए, यह वास्तव में ऐसा नहीं है कि यह सवाल क्या है, इसलिए अपने अंतिम संपादन को बेहतर बनाएं और / या अपने उत्तर को पूरी तरह से हटा दें।
Cœur

1

यदि आप UITableview में अवांछित स्थान को हटाना चाहते हैं तो आप नीचे दो विधियों का उपयोग कर सकते हैं

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    return 0.1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 0.1;
}

1

मैंने इस छोटे से टेबलव्यू एक्सटेंशन को जोड़ा है जो पूरे में मदद करता है

extension UITableView {
     func removeExtraCells() {
         tableFooterView = UIView(frame: .zero)
     }
}

1

इस के साथ प्रयास करें

के लिए उद्देश्य सी

- (void)viewDidLoad 
 {
  [super viewDidLoad];
  // This will remove extra separators from tableview
  self.yourTableView.tableFooterView = [UIView new];
}

के लिए स्विफ्ट

override func viewDidLoad() {
 super.viewDidLoad()
 self.yourTableView.tableFooterView = UIView()
}

0

इसे इस्तेमाल करे

self.tables.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 10.0f)];

0

UIKitखाली सेल नहीं बनाता है जब tableViewएक है tableFooterView। तो हम एक ट्रिक बना सकते हैं और शून्य ऊंचाई UIViewऑब्जेक्ट को पाद लेख के रूप में निर्दिष्ट कर सकते हैं tableView

tableView.tableFooterView = UIView()

0

मामले में आप एक है searchbarकि आपका view(उदाहरण के लिए परिणामों की संख्या सीमित करने के लिए), आप भी में निम्नलिखित जोड़ने के लिए shouldReloadTableForSearchStringऔरshouldReloadTableForSearchScope:

controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];

0

स्विफ्ट में (मैं 4.0 का उपयोग कर रहा हूँ), आप एक कस्टम बनाकर ऐसा कर सकते हैं UITableViewCellवर्ग, और विधि। फिर सभी को 0 । (टेबल व्यू के साथ मेरी मुख्य कक्षा में स्पष्ट पृष्ठभूमि है) रंग।overridingsetSelectedseparator insets

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // eliminate extra separators below UITableView
    self.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.