如何使UITableView放置在安全区域内

时间:2019-07-17 19:35:12

标签: ios swift uitableview

我试图将我的UITableView放置在安全区域内,但是它似乎没有起作用,我也不知道为什么。我试图以编程方式执行此操作。

class MenuTableViewController: UITableViewController{
    var margin: UILayoutGuide!
    var tableDataSource: [userFolderObject]!
    let cellId = "cellId"

    override func viewDidLoad() {
        super.viewDidLoad()

        setup()
    }

    private func setup(){
        margin = view.layoutMarginsGuide
        tableDataSource = MockData.UITableDateSource
        tableView.translatesAutoresizingMaskIntoConstraints = false
        tableView.topAnchor.constraint(equalTo: margin.topAnchor).isActive = true
        tableView.bottomAnchor.constraint(equalTo: margin.bottomAnchor).isActive = true
        tableView.leadingAnchor.constraint(equalTo: margin.leadingAnchor).isActive = true
        tableView.trailingAnchor.constraint(equalTo: margin.trailingAnchor).isActive = true 

        /* I have also tried the below code
        tableView.translatesAutoresizingMaskIntoConstraints = false
        tableView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
        tableView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
        tableView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
        tableView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
        */

        tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellId)
    }

    override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let label = UILabel()
        label.backgroundColor = UIColor.lightGray
        if section == 0{
            label.text = "Search PubMed"
        }else{
            label.text = "My Folders"
        }
        return label
    }
}

enter image description here

1 个答案:

答案 0 :(得分:1)

首先,删除所有试图弄乱表格视图边距的设置代码。默认情况下,这一切都是在UITableViewController中完成的。

由于您的问题仅在于自定义节标题视图的布局,因此您需要修复实现这些视图的方式。

就像单元格一样,您应该使用可重复使用的页眉/页脚视图,并且页眉/页脚视图应扩展UITableViewHeaderFooterView。默认情况下,这将确保适当的边距,并且已经提供了可以设置的标准textLabel。无需创建自己的UILabel

UITableViewHeaderFooterView的文档中所示,您应该注册一个类。然后,在viewForHeader中,应该使标题视图出队列,然后根据需要设置其textLabel

如果您实际上只需要一个普通的旧节标签,则不要实现viewForHeader。而是实施titleForHeader。简单得多。