UITableView重叠所有内容

时间:2019-01-22 16:24:33

标签: swift xcode

我是一个新的程序员,开始使用xCode的时间不到3周,所以这个问题对您来说似乎很愚蠢,但确实需要您的帮助。 这个问题不是重复的,因为之前类似的问题是关于状态栏的重叠,但是我的情况是导航栏和选项卡栏消失了。 最初,我在ViewController中设置了导航栏和标签栏。 但是,在Youtube之后通过代码设置UITableView之后,它涵盖了所有内容,整个页面变成了表View,如下所示: enter image description here

但是我并没有打算将表格覆盖到整个页面,而是出现了导航栏和表格栏。我像这样设置Viewcontroller: enter image description here

能帮我一个大忙吗,谢谢你! 代码是这样的:

class HomeViewController:UIViewController, UITableViewDelegate, 
UITableViewDataSource {

var tableView:UITableView!

var posts = [
Post(id: "1", author: "Donald", text: "Ho"),
Post(id: "2", author: "Brian Yung", text: "Hi")
]


override func viewDidLoad() {
    super.viewDidLoad()
    tableView = UITableView(frame: view.bounds, style: .plain)
    tableView.backgroundColor = UIColor.blue

    let cellNib = UINib(nibName: "PostTableViewCell", bundle: nil)
    tableView.register(cellNib, forCellReuseIdentifier: "postCell")
    view.addSubview(tableView)

    var layoutGuide:UILayoutGuide!

    if #available(iOS 11.0, *) {
        layoutGuide = view.safeAreaLayoutGuide
    } else {
        // Fallback on earlier versions
        layoutGuide = view.layoutMarginsGuide
    }
    tableView.contentInset.top = 50
    tableView.leadingAnchor.constraint(equalTo: layoutGuide.leadingAnchor).isActive = true
    tableView.topAnchor.constraint(equalTo: layoutGuide.topAnchor, constant: 32).isActive = true
        tableView.trailingAnchor.constraint(equalTo: layoutGuide.trailingAnchor).isActive = true
    tableView.bottomAnchor.constraint(equalTo: layoutGuide.bottomAnchor).isActive = true

    tableView.delegate = self
    tableView.dataSource = self
    tableView.reloadData()


}


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

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "postCell", for: indexPath) as! PostTableViewCell
    cell.set(post: posts[indexPath.row])
    return cell
}

}

1 个答案:

答案 0 :(得分:0)

我也曾经遇到过这个问题,即使似乎对视图的约束是正确的,也无法弄清为什么会发生...因此,没有任何实际的解决方案,我使用以下解决方法解决了这个问题。看看它是否对您也有帮助。

解决方法的要点是: 使用单独的控制器进行表视图,并使用容器视图将其嵌入“主”视图中

步骤:

  1. 在要添加表视图的视图上,删除表视图,并在要添加表视图的位置添加容器视图。为此创建适当的约束(应从顶部到底部进行限制)
  2. 创建单独的 Table View Controller 。并为其创建一个新的Controller类。 UITableViewDelegateUITableViewDataSource中的所有方法都应从HomeViewController移到该新控制器
  3. 容器视图表视图控制器
  4. 创建嵌入序列
  5. UITableViewDelegate, UITableViewDataSource删除HomeViewController(仅扩展UIViewController

即:

enter image description here