วิธีลบเซลล์ว่างพิเศษใน TableViewController, iOS - Swift


118

สวัสดีฉันมีTableViewControllerเซลล์แบบคงที่สองเซลล์อย่างไรก็ตามเมื่อแสดงมันจะแสดงเซลล์คงที่สองเซลล์จากนั้นเซลล์ว่างอื่น ๆ ทั้งหมดสำหรับมุมมองตาราง อย่างไรก็ตามฉันไม่ต้องการแสดงเซลล์เหล่านั้นเนื่องจากไม่มีประโยชน์ ฉันจะซ่อนเซลล์ที่เหลือนอกเหนือจากเซลล์คงที่สองเซลล์ได้อย่างไร

คำตอบ:


405

ในviewDidLoad()ฟังก์ชันของคุณเพิ่มโค้ดบรรทัดนี้:

tableView.tableFooterView = UIView()

4
สั้นและมีประสิทธิภาพ! ทำงานอย่างมีเสน่ห์!
yogipriyo

6
สิ่งนี้หมายความว่า? คุณช่วยอธิบายได้ไหม?
Jayprakash Dubey

คำตอบนี้ยังใช้ได้ใน Swift 3 นอกจากนี้หากคุณตั้งค่าสีพื้นหลัง tableview ให้เหมือนกับสีพื้นหลังของมุมมองหลักมันจะทำให้ดูเหมือนว่าส่วนท้ายหายไป
Micah Montoya

มีวิธีแก้ปัญหาที่คล้ายกันสำหรับNSTableView? มันไม่มีtableFooterView.
ixany

SWIFT 3.0 ใช้งานได้ดีกับtableView.tableFooterView = UIView()
Marcelo Gracietti

19

เลือก UITableView ของคุณไปที่ตัวตรวจสอบแอตทริบิวต์และเปลี่ยนสไตล์เป็น Grouped

ใส่คำอธิบายภาพที่นี่


7

หากต้องการเพิ่มสิ่งนี้สาเหตุที่การตั้งค่าtableFooterViewเพื่อUIView()ลบแถวออกเป็นเพราะคุณกำลังตั้งค่าUIView()วัตถุว่างให้กับคุณสมบัติ ตามเอกสารของ Apple:

var tableFooterView: UIView?

ดังนั้นการตั้งค่า UIView () ที่ว่างเปล่าจะไม่แสดงข้อมูลใด ๆ ด้านล่างข้อมูลของคุณสำหรับคุณสมบัตินี้

คุณสามารถนำแถวที่ว่างกลับมาได้โดยการรีเซ็ตtableFooterViewเป็นค่าเริ่มต้นดังนี้:

tableView.tableFooterView = nil

2
ขอโทษที แต่ดูเหมือนแฮ็ค?
AOY

2
ไม่นี่เป็นวิธีที่ถูกต้องอย่างสมบูรณ์ในการทำ หากคุณต้องการตั้งค่า tableFooterView แบบกำหนดเองคุณต้องสร้าง UIView ที่กำหนดเองก่อนตั้งค่าเป็น tableFooterView จากนั้นการรีเซ็ตเป็นศูนย์เพียงแค่คืนค่าเป็นค่าเริ่มต้น
ขนมปังปิ้ง

ฉันเห็น. ขอบคุณ) มันดูแปลก ๆ สำหรับฉันเพราะฉันยังใหม่กับความรวดเร็ว
AOY

6

การตั้งค่าtableFooterViewควรลบเซลล์พิเศษเช่นมุมมอง

   @IBOutlet weak var tableView: UITableView! {
        didSet {
            tableView.tableFooterView = UIView(frame: .zero)
        }
    }

3

คุณสามารถทำสิ่งนี้ได้เช่นกันใน Storyboard โดยเพียงแค่ลากมุมมองไปยังพื้นที่ส่วนท้ายของมุมมองตารางจากนั้นตั้งค่าความสูงและสีพื้นหลังเป็น 1 และล้างตามลำดับโดยใช้ตัวตรวจสอบคุณสมบัติ

(สมมติว่าคุณไม่สามารถหรือไม่ต้องการเพียงแค่ใช้การตั้งค่ารูปแบบกลุ่มด้วยเหตุผลบางประการไม่เช่นนั้นให้ทำเช่นนั้น)


3

Swift 4 อธิบายเกี่ยวกับคำตอบของ HorseT ก่อนอื่นให้ลากการควบคุมจาก Table View ในสตอรี่บอร์ดของคุณไปยังคลาส View Controller ของคุณและสร้างร้านที่เรียกว่า tableView

@IBOutlet weak var tableView: UITableView!

จากนั้น viewDidLoad ของคุณใน View Controller ของคุณควรมีลักษณะดังนี้:

    override func viewDidLoad() {
    super.viewDidLoad()

    tableView.dataSource = self
    tableView.delegate = self

    tableView.tableFooterView = UIView()
}


2

หากคุณต้องการลบแถวทั้งหมดUITableViewsในแอปของคุณเพียงแค่เพิ่มส่วนขยายดังนี้:

Swift 5.0

extension UITableView {

override open func didMoveToSuperview() {
    super.didMoveToSuperview()
    self.tableFooterView = UIView()

}


1

เพิ่มโค้ดด้านล่างในฟังก์ชัน" override func viewDidLoad () " หรือ"override func viewWillAppear (_ animated: Bool)"

tblOutletName.tableFooterView = UIView ()


0

เพียงเพิ่ม:

tableView.tableFooterView = UIView()

คำอธิบาย:

สิ่งนี้ใช้ได้โดยสิ้นเชิงและทำงานได้อย่างสมบูรณ์ใน swift 3 โดยเนื่องจากคุณกำลังตั้งค่าวัตถุ UIView () ที่ว่างเปล่าให้กับคุณสมบัติการตั้งค่า tableFooterView เป็น UIView () จะลบแถวออก


-2

Abobe anwer พูดถูก เราสามารถบรรลุสิ่งนี้ได้โดยการเพิ่ม

tableView.tableFooterView = UIView() // to remove extra cells in tableView

-3

ฉันลอง tableview.tableFooterView = UIView () แล้วก็ไม่ได้ผลสำหรับฉัน ฉันใช้ TableViewViewCell แบบกำหนดเองบางทีนั่นอาจเป็นสาเหตุ

ฉันพบแฮ็คโท ใน func numberOfRowsInSection ของฉัน

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return yourArrayClass.count - 1
}

และนั่นทำให้ UITableViewCell ที่กำหนดเองว่างเปล่าของฉันไม่แสดงอีกต่อไป แน่นอนว่ามันเป็นช่องว่างพิเศษ ฉันจะทดสอบเพิ่มเติมโดยการเพิ่มเซลล์ให้มากขึ้น สำหรับการอ้างอิงฉันใช้ Swift 3, Firebase ซึ่งเป็นคลาสเซลล์ที่กำหนดเองภายในฟังก์ชัน cellForRowAt


สิ่งนี้จะไม่แสดงรายการสุดท้ายในอาร์เรย์
elarcoiris
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.