Ios 表格表格内的TableView未正确显示
我试图在表单中显示TableView。这完全符合iPhone的预期。然而,当我出于某种原因在iPad上测试它时,视图比表单要大。 下面是我所说的图像: iPad 如您所见,文本在框架中并非全部可见。全文为“未完全显示” 下面是它应该是什么样子(忽略黑暗模式) iPhone 在MainController()中,我通过在ViewDidLoad()中使用它来呈现这个页面IntroController() 在IntroController()中,这是代码Ios 表格表格内的TableView未正确显示,ios,swift,xcode,ipad,Ios,Swift,Xcode,Ipad,我试图在表单中显示TableView。这完全符合iPhone的预期。然而,当我出于某种原因在iPad上测试它时,视图比表单要大。 下面是我所说的图像: iPad 如您所见,文本在框架中并非全部可见。全文为“未完全显示” 下面是它应该是什么样子(忽略黑暗模式) iPhone 在MainController()中,我通过在ViewDidLoad()中使用它来呈现这个页面IntroController() 在IntroController()中,这是代码 import UIKit var tab
import UIKit
var tableview: UITableView!
class IntroController: UIViewController, UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: TableCell.reuseIdentifier()) as! TableCell
cell.label.text = "Amount"
cell.typeLabel.text = "THIS IS NOT SHOWING FULLY"
cell.selectionStyle = .none
cell.accessoryType = .none
return cell
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func viewDidLoad() {
super.viewDidLoad()
tableview = UITableView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height), style: .grouped)
view.addSubview(tableview)
tableview.register(UINib(nibName: TableCell.nibName(), bundle: nil), forCellReuseIdentifier: TableCell.reuseIdentifier())
tableview.delegate = self
tableview.dataSource = self
}
}
有人知道为什么会发生这种情况以及如何解决吗
谢谢大家! 不要将表视图作为子视图添加到VC的
视图
,而是直接将其设置为视图
:
view = tableview
或者,直接使用UITableViewController
。我强烈建议您选择这种方法
class IntroController: UITableViewController {
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
...
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UINib(nibName: TableCell.nibName(), bundle: nil), forCellReuseIdentifier: TableCell.reuseIdentifier())
}
}
我不确定这是什么原因造成的,但如果我猜的话,可能是因为调用viewDidLoad
时,由于某种原因,view.frame
没有设置为VC的内容大小的矩形。如果将表视图作为view
的子视图添加到viewdilayoutsubview
的代码移动到
override func viewDidLayoutSubviews() {
if view.subviews.count < 1 {
tableview = UITableView(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height), style: .grouped)
tableview.register(UINib(nibName: TableCell.nibName(), bundle: nil), forCellReuseIdentifier: TableCell.reuseIdentifier())
view.addSubview(tableview)
tableview.delegate = self
tableview.dataSource = self
}
}
重写func viewdilayoutsubviews(){
如果view.subviews.count小于1{
tableview=UITableView(框架:CGRect(x:0,y:0,宽度:view.bounds.width,高度:view.bounds.height),样式:。分组)
register(UINib(nibName:TableCell.nibName(),bundle:nil),forCellReuseIdentifier:TableCell.reuseIdentifier())
view.addSubview(tableview)
tableview.delegate=self
tableview.dataSource=self
}
}
不要将表格视图作为子视图添加到VC的视图中,而是直接将其设置为视图
:
view = tableview
或者,直接使用UITableViewController
。我强烈建议您选择这种方法
class IntroController: UITableViewController {
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
...
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UINib(nibName: TableCell.nibName(), bundle: nil), forCellReuseIdentifier: TableCell.reuseIdentifier())
}
}
我不确定这是什么原因造成的,但如果我猜的话,可能是因为调用viewDidLoad
时,由于某种原因,view.frame
没有设置为VC的内容大小的矩形。如果将表视图作为view
的子视图添加到viewdilayoutsubview
的代码移动到
override func viewDidLayoutSubviews() {
if view.subviews.count < 1 {
tableview = UITableView(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height), style: .grouped)
tableview.register(UINib(nibName: TableCell.nibName(), bundle: nil), forCellReuseIdentifier: TableCell.reuseIdentifier())
view.addSubview(tableview)
tableview.delegate = self
tableview.dataSource = self
}
}
重写func viewdilayoutsubviews(){
如果view.subviews.count小于1{
tableview=UITableView(框架:CGRect(x:0,y:0,宽度:view.bounds.width,高度:view.bounds.height),样式:。分组)
register(UINib(nibName:TableCell.nibName(),bundle:nil),forCellReuseIdentifier:TableCell.reuseIdentifier())
view.addSubview(tableview)
tableview.delegate=self
tableview.dataSource=self
}
}
显示您的手机class@jawadAli这是不相关的。看看清扫者的回答。太好了。。很高兴知道你得到了答案出示你的手机class@jawadAli这是不相关的。看看清扫者的回答。太好了。。很高兴知道你得到了答案,正如你提到的那样,在viewDidLayoutSubviews()中找到了它修复了它!谢谢大家!@最重要的是,为什么不能使用UITableViewController
或将表视图设置为视图
?这两种方法的“脆弱性”要小得多。上面的课程仅用于演示。我没有将其设置为UITableViewController,因为在“let cell=tableView.dequeueReusableCell(带标识符:TableCell.reuseIdentifier())as!TableCell”旁边出现错误“线程1:致命错误:在展开可选值时意外发现零”。我没有理由不设置view=tableView,只是我不确定设置后它是如何工作的,你是在注册东西或修改它的属性时使用tableView,还是只调用视图?我不想再把自己搞糊涂了,所以我就吃了它们separat@ItsMoShehab我不确定是什么导致了意外发现的零错误。您是否仍在使用全局表视图
?你现在应该删除它。在表VC的表视图
(大写V
)上注册单元格。如果您想使用view=tableView
,只需将addSubview
调用替换为该行即可。@ItsMoShehab yes在viewdilayoutsubviews()中对其进行调整,如您所述,已修复该问题!谢谢大家!@最重要的是,为什么不能使用UITableViewController
或将表视图设置为视图
?这两种方法的“脆弱性”要小得多。上面的课程仅用于演示。我没有将其设置为UITableViewController,因为在“let cell=tableView.dequeueReusableCell(带标识符:TableCell.reuseIdentifier())as!TableCell”旁边出现错误“线程1:致命错误:在展开可选值时意外发现零”。我没有理由不设置view=tableView,只是我不确定设置后它是如何工作的,你是在注册东西或修改它的属性时使用tableView,还是只调用视图?我不想再把自己搞糊涂了,所以我就吃了它们separat@ItsMoShehab我不确定是什么导致了意外发现的零错误。您是否仍在使用全局表视图
?你现在应该删除它。在表VC的表视图
(大写V
)上注册单元格。如果要使用view=tableView
,只需将addSubview
调用替换为该行。@ItsMoShehab yes