ios - tableview教學 - uitableview swift




消除UITableView下面的額外分隔符 (20)

界面構建器(iOS 9+)

只需將UIView拖動到表格中即可。 在故事板中,它將位於自定義單元格下方的頂部。 您可能更願意將其命名為“頁腳”。

為了清晰起見,它以綠色顯示,您可能需要清晰的顏色。

請注意,通過調整高度,您可以根據自己的喜好來影響表格“底部反彈”的處理方式。 (高度零通常很好)。

以編程方式進行:

迅速

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

Objective-C的

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

當我設置了4行的表格視圖時,在填充的行下還有額外的分隔符行(或額外的空白單元格)。

我將如何刪除這些細胞?


Swift 4.0擴展

只是故事板的一個小擴展:

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

適用於使用Storyboard的iOS 7+

只需將UIView作為頁腳拖入UITableView 。 將頁腳視圖的高度設置為0。


Swift 3 / Swift 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()
}

SWIFT 3.0tableView.tableFooterView = UIView()


詳細信息: Swift 3,Xcode: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 )。 。

tableView.tableFooterView = UIView()

嘗試這個

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

Swift中為UITableView中的空行刪除額外的分隔線

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

如果你不想在最後一個單元之後有任何分隔符,那麼你需要一個接近於零但非零高度的頁腳。

在你的UITableViewDelegate

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

如果你是UITableView的子類,你需要這樣做...

-(void)didMoveToSuperview {
    [super didMoveToSuperview];
    self.tableFooterView = [UIView new];
}

如果您使用的是Swift,請將以下代碼添加到管理tableview的控制器的viewDidLoad中:

override func viewDidLoad() {
    super.viewDidLoad()

    //...

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

如果您在查看中有搜索欄(例如限制結果數量),則還必須在shouldReloadTableForSearchString和shouldReloadTableForSearchScope中添加以下內容:

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

快速簡單的斯威夫特4方式。

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

如果你有靜態單元格。 您也可以關閉檢查器窗口中的分隔符。 (如果你需要分離器,這將不是可取的,在這種情況下使用上面的方法)


我使用表視圖來顯示固定數量的列,所以我只是調整它的大小並使其不可滾動。


我只是在ViewDidLoad函數中添加這一行,並修復了問題。

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

我有一些運氣實現了接受的答案(iOS 9+,Swift 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 (如果有多個部分,則需要指定最後一個部分)。


我知道這個問題已被接受的答案,但我把這裡不同的方式來隱藏額外的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時, UIKit不會創建空單元格。 所以我們可以製作一個技巧,並將一個零高度的UIView對象指定為tableView頁腳。

tableView.tableFooterView = UIView()

要以編程方式從UItableview底部消除額外的分隔線,只需在兩行代碼中寫下來,它將從中刪除額外的分隔符。

tableView.sectionFooterHeight = 0.f;

tableView.sectionHeaderHeight = 0.f;

這個技巧一直在為我工作,試試自己。 @KPCoding ...





cocoa-touch