我需要在一个单元格与另一个单元格之间留出空间

时间:2018-01-17 11:24:04

标签: ios xcode swift3

我找不到我的问题。 我需要在一个小区和另一个小区之间留出空间。

我写了self.tableView Storyline.delegate = self,因为我读到这可能是问题,但不知道它是否正确。

这是我的代码:

class ClassName: UIViewController, UITableViewDataSource, UITabBarControllerDelegate, UITableViewDelegate {
    public var notifications: [APINotification] = []

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tabBarController?.delegate = self
        tableViewStoryline.rowHeight = UITableViewAutomaticDimension
        tableViewStoryline.estimatedRowHeight = 140
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func viewDidAppear(_ animated: Bool) {
        self.notifications = []
        self.getLastNotifications()
        APIAuth.shared.count_badge = 0
        self.tabBarController?.tabBar.items![0].badgeValue = nil
    }

    public func getLastNotifications() {
        let req = Notification()
        req.getLastNotifications(onComplete: {events in
            self.notifications = events

            DispatchQueue.main.async(execute: {
                self.tableViewStoryline.delegate = self
                self.tableViewStoryline.dataSource = self
                self.tableViewStoryline.sectionHeaderHeight = 10
                self.tableViewStoryline.reloadData()
            })
        })
    }

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

    // There is just one row in every section
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if self.notifications.count > 4 {
            return 4
        } else {
            return self.notifications.count
        }
    }

    // Set the spacing between sections
    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 10
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        cell = tableView.dequeueReusableCell(withIdentifier: "controller")! as UITableViewCell
        titleLbl.text = notifications[indexPath.row].title
        bodyLbl.text =  notifications[indexPath.row].description
        typeLbl.text = notifications[indexPath.row].type

        return cell!
    } 
}

有谁知道问题是什么? 是否缺少某些代码?

谢谢!

2 个答案:

答案 0 :(得分:3)

我认为这就是你想要的:

    func numberOfSections(in tableView: UITableView) -> Int {
        if self.notifications.count > 4 {
            return 4
        } else {
            return self.notifications.count
        }
    }

    // There is just one row in every section
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

然后您还必须更改cellForRowAt以考虑到这一点。

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        cell = tableView.dequeueReusableCell(withIdentifier: "controller")! as UITableViewCell
        titleLbl.text = notifications[indexPath.section].title
        bodyLbl.text =  notifications[indexPath.section].description
        typeLbl.text = notifications[indexPath.section].type

        return cell!
    }

您希望notifications.count个部分和每个部分都有一行,而不是一个部分包含notifications.count行。现在将10个点设置为节标题的高度将使单元格显示为它们之间有空格。

您可以考虑其他一些选项,请参阅我的other answer

答案 1 :(得分:0)

你使用了错误的委托功能。

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

用于标题的高度而不是单元格的高度。

使用func tableView(UITableView, heightForRowAt: IndexPath) 你会得到正确大小的细胞。

希望这有帮助!