我是一个新的程序员,开始使用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
}
}
答案 0 :(得分:0)
我也曾经遇到过这个问题,即使似乎对视图的约束是正确的,也无法弄清为什么会发生...因此,没有任何实际的解决方案,我使用以下解决方法解决了这个问题。看看它是否对您也有帮助。
解决方法的要点是: 使用单独的控制器进行表视图,并使用容器视图将其嵌入“主”视图中
步骤:
UITableViewDelegate
和UITableViewDataSource
中的所有方法都应从HomeViewController
移到该新控制器UITableViewDelegate, UITableViewDataSource
删除HomeViewController
(仅扩展UIViewController
)即: