Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 表格表格内的TableView未正确显示_Ios_Swift_Xcode_Ipad - Fatal编程技术网

Ios 表格表格内的TableView未正确显示

Ios 表格表格内的TableView未正确显示,ios,swift,xcode,ipad,Ios,Swift,Xcode,Ipad,我试图在表单中显示TableView。这完全符合iPhone的预期。然而,当我出于某种原因在iPad上测试它时,视图比表单要大。 下面是我所说的图像: iPad 如您所见,文本在框架中并非全部可见。全文为“未完全显示” 下面是它应该是什么样子(忽略黑暗模式) iPhone 在MainController()中,我通过在ViewDidLoad()中使用它来呈现这个页面IntroController() 在IntroController()中,这是代码 import UIKit var tab

我试图在表单中显示TableView。这完全符合iPhone的预期。然而,当我出于某种原因在iPad上测试它时,视图比表单要大。 下面是我所说的图像:

iPad

如您所见,文本在框架中并非全部可见。全文为“未完全显示”

下面是它应该是什么样子(忽略黑暗模式)

iPhone

在MainController()中,我通过在ViewDidLoad()中使用它来呈现这个页面IntroController()

在IntroController()中,这是代码

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