swift 空表视图上没有结果标签

kmynzznz  于 2023-09-30  发布在  Swift
关注(0)|答案(3)|浏览(125)

如果tableView为空,我将添加“No results”标签。

extension UITableView {
    override open func layoutSubviews() {
        print("Table layoutSubviews")
        let label = UILabel(frame: self.bounds)
        if self.visibleCells.isEmpty {
            label.center = self.center
            label.text = "No Results"
            label.textAlignment = .center
            if label.superview == nil {
                self.addSubview(label)
            }
        } else {
            label.removeFromSuperview()
        }
    }
}

但这在更新/重命名tableView(行更改)时不起作用。在非空UITableView上仍显示“No Result”(无结果

uqzxnwby

uqzxnwby1#

extension UITableView {

    func setMessage(_ message: String) {
        let lblMessage = UILabel(frame: CGRect(x: 0, y: 0, width: self.bounds.size.width, height: self.bounds.size.height))
        lblMessage.text = message
        lblMessage.textColor = .black
        lblMessage.numberOfLines = 0
        lblMessage.textAlignment = .center
        lblMessage.font = UIFont(name: "TrebuchetMS", size: 15)
        lblMessage.sizeToFit()

        self.backgroundView = lblMessage
        self.separatorStyle = .none
    }

    func clearBackground() {
        self.backgroundView = nil
        self.separatorStyle = .singleLine
    }
}

现在像下面这样使用这个扩展

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

    if items.count == 0 {
        tableView.setMessage("No results")
    } else {
        tableView.clearBackground()
    }

    return items.count
}
kt06eoxx

kt06eoxx2#

创建名为“TableViewHelper”的Swift类。您也可以在CollectionView中使用。

import UIKit

class TableViewHelper {

    class func EmptyMessage(message:String, tableview:UITableView,vc:UIViewController) {
    let rect = CGRect(origin: CGPoint(x: 0,y :0), size: CGSize(width: vc.view.bounds.size.width, height: vc.view.bounds.size.height))
    let messageLabel = UILabel(frame: rect)
    messageLabel.text = message
    messageLabel.textColor = UIColor.white
    messageLabel.numberOfLines = 0;
    messageLabel.textAlignment = .center
    messageLabel.font = UIFont(name: "TrebuchetMS", size: 15)
    messageLabel.sizeToFit()

    tableview.backgroundView = messageLabel;
    tableview.separatorStyle = .none;
    }
}

class ColelctionViewHelper {

    class func EmptyMessage(message:String, collectionview:UICollectionView,vc:UIViewController) {
    let rect = CGRect(origin: CGPoint(x: 0,y :0), size: CGSize(width: vc.view.bounds.size.width, height: vc.view.bounds.size.height))
    let messageLabel = UILabel(frame: rect)
    messageLabel.text = message
    messageLabel.textColor = UIColor.white
    messageLabel.numberOfLines = 0;
    messageLabel.textAlignment = .center
    messageLabel.font = UIFont(name: "TrebuchetMS", size: 15)
    messageLabel.sizeToFit()

    collectionview.backgroundView = messageLabel;
   // collectionview.separatorStyle = .none;
    }
}

这就是你使用它的方式,

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
  if YourArray.count>0{
            TableViewHelper.EmptyMessage(message: "", tableview: TableName,vc: self)
            return EventArray.count
        }else{
            TableViewHelper.EmptyMessage(message: "No Results", tableview: TableName,vc: self)
            return 0;
        }
}
gfttwv5a

gfttwv5a3#

我尝试了在tableview的背景中添加标签的解决方案,但是当我们滚动空tableview时,标签的行为看起来很奇怪。我还尝试停止tableview的滚动行为,但当tableview数组不为空时,这不起作用。所以我尝试了另一种解决方案,它的工作完美,就像我想要的。

// MARK: - TableView Delegate Functions
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let label = UILabel()
    label.text = "No data to show"
    label.font = UIFont.systemFont(ofSize: 16, weight: .semibold)
    label.textColor = .gray
    label.textAlignment = .center
    
    if dataArray.count == 0 {
        return label
    }
    return nil
}

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    if dataArray.count == 0 {
        return 250 // According to requirement
    }
    return 0
}

注意事项

在更新dataArray后,不要忘记调用tableView.reloadData()

相关问题