ios - UITableView के नीचे अतिरिक्त विभाजक हटाएं




cocoa-touch (25)

यदि आपके पास केवल एक अनुभाग है, तो सबसे तेज़ और आसान तरीका है कि टेबल व्यू स्टाइल को "सादा" से "समूहबद्ध" में सेट करना है। (छवि देखें)

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

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

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

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


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

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

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

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

- (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];
}

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

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


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

tableView.sectionFooterHeight = 0.f;

tableView.sectionHeaderHeight = 0.f;

यह चाल हर समय मेरे लिए काम कर रही है, अपने आप को आजमाएं। @KPCoding ...


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

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

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

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

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

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

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


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

tableView.tableFooterView = UIView()

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

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

विवरण: स्विफ्ट 3, एक्सकोड: 8.1

कोड

extension UITableView {

    var emptyCellsEnabled: Bool {
        set(newValue) {
            if newValue {
                tableFooterView = nil
            } else {
                tableFooterView = UIView()
            }

        }
        get {
            if tableFooterView == nil {
                return true
            }
            return false
        }
    }
}

प्रयोग

// hide empty cells
tableView.emptyCellsEnabled = false

// show empty cells
tableView.emptyCellsEnabled = true

पूरा उदाहरण

ViewController.swift

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var footerSwitchButton: UIButton!

    var emptyCellsEnabled: Bool {
        get {
            return tableView.emptyCellsEnabled
        }

        set (newValue) {
            if newValue {
                footerSwitchButton.setTitle("Hide", for: .normal)
            } else {
                footerSwitchButton.setTitle("Show", for: .normal)
            }

            tableView.emptyCellsEnabled = newValue
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.delegate = self
        tableView.dataSource = self
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 3
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell()
        cell.textLabel?.text = "\(indexPath)"
        return cell
    }

    @IBAction func buttonAction(_ sender: Any) {
        emptyCellsEnabled = !emptyCellsEnabled
    }
}

extension UITableView {

    var emptyCellsEnabled: Bool {
        set(newValue) {
            if newValue {
                tableFooterView = nil
            } else {
                tableFooterView = UIView()
            }

        }
        get {
            if tableFooterView == nil {
                return true
            }
            return false
        }
    }
}

Main.storyboard

<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11542" systemVersion="16B2555" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="ABN-e6-xZB">
    <device id="retina4_7" orientation="portrait">
        <adaptation id="fullscreen"/>
    </device>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11524"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="tne-QT-ifu">
            <objects>
                <viewController id="BYZ-38-t0r" customClass="ViewController" customModule="_1633966" customModuleProvider="target" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="Vun-mi-5Wc">
                                <rect key="frame" x="0.0" y="64" width="375" height="603"/>
                                <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                            </tableView>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="Vun-mi-5Wc" firstAttribute="top" secondItem="y3c-jy-aDJ" secondAttribute="bottom" id="9Pj-Wl-qW6"/>
                            <constraint firstItem="Vun-mi-5Wc" firstAttribute="bottom" secondItem="wfy-db-euE" secondAttribute="top" id="KIO-bu-Dz6"/>
                            <constraint firstItem="Vun-mi-5Wc" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leading" id="gJl-YJ-vQY"/>
                            <constraint firstAttribute="trailing" secondItem="Vun-mi-5Wc" secondAttribute="trailing" id="gef-yl-Rvt"/>
                        </constraints>
                    </view>
                    <navigationItem key="navigationItem" id="tH2-D6-JJL">
                        <barButtonItem key="rightBarButtonItem" style="plain" id="ROj-kP-cCC">
                            <button key="customView" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="0C7-jC-HjH">
                                <rect key="frame" x="276" y="7" width="83" height="30"/>
                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                <state key="normal" title="Button"/>
                                <connections>
                                    <action selector="buttonAction:" destination="BYZ-38-t0r" eventType="touchUpInside" id="d6H-00-Yww"/>
                                </connections>
                            </button>
                        </barButtonItem>
                    </navigationItem>
                    <connections>
                        <outlet property="footerSwitchButton" destination="0C7-jC-HjH" id="EgU-Vx-Skx"/>
                        <outlet property="tableView" destination="Vun-mi-5Wc" id="OHe-J2-y4A"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="1072.8" y="137.18140929535232"/>
        </scene>
        <!--Navigation Controller-->
        <scene sceneID="xgG-0P-k1k">
            <objects>
                <navigationController automaticallyAdjustsScrollViewInsets="NO" id="ABN-e6-xZB" sceneMemberID="viewController">
                    <toolbarItems/>
                    <navigationBar key="navigationBar" contentMode="scaleToFill" id="xS4-8G-RJU">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
                        <autoresizingMask key="autoresizingMask"/>
                    </navigationBar>
                    <nil name="viewControllers"/>
                    <connections>
                        <segue destination="BYZ-38-t0r" kind="relationship" relationship="rootViewController" id="JET-Cj-BFP"/>
                    </connections>
                </navigationController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="Bh9-fJ-Nrf" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="133.59999999999999" y="137.18140929535232"/>
        </scene>
    </scenes>
</document>

परिणाम


SWIFT 3.0 tableView.tableFooterView = UIView() साथ बढ़िया काम करता है


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

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

अद्यतन करें:

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

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];

किसी एक का प्रयास करें;


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

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


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

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

पहली poosible विधि के अंदर (आमतौर पर AppDelegate में, में: आवेदन: didFinishLaunchingWithOptions: विधि)।


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

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

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


बस इस कोड को जोड़ें ( स्विफ्ट )। ।

tableView.tableFooterView = UIView()

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

- (void) viewDidLoad
{
  [super viewDidLoad];

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

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

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

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

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


मैं सिर्फ इस लाइन को ViewDidLoad फ़ंक्शन और समस्या को ठीक करता हूं।

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

इंटरफेस बिल्डर (आईओएस 9 +)

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

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

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

इसे प्रोग्रामेटिक रूप से करने के लिए:

तीव्र

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

उद्देश्य सी

आईओएस 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];

आईओएस में ऐतिहासिक रूप से:

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

- (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];
}

मैं 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 करने के लिए धन्यवाद :)


स्विफ्ट 3 / स्विफ्ट 4, बहुत आसान और सरल तरीका

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
      //MARK:- For Hiding the extra lines in table view.
    tableView?.tableFooterView = UIView()
}

या

override func viewDidLoad(_ animated: Bool) {
    super.viewDidLoad(animated)
      //MARK:- For Hiding the extra lines in table view.
    tableView?.tableFooterView = UIView()
}

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


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

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

स्विफ्ट में:

tableView.separatorStyle = .None




ios uitableview cocoa-touch