表格视图显示在屏幕下方

Posted

技术标签:

【中文标题】表格视图显示在屏幕下方【英文标题】:Table View Displays Below Screen 【发布时间】:2016-01-28 05:34:24 【问题描述】:

我的问题是 TableView 中的最后一个单元格位于屏幕视图下方,要查看它,您必须向上滚动并保持位置。在您不向上滚动的中性位置,您看不到最后一个单元格。一切似乎都很好,直到我改变了单元格的大小。这是我的代码:

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource 

//MARK : Properties
var tableView = UITableView()
var items: [String] = ["Age", "Gender", "Smoking Hx", "Occup. -Ag", "Family Hx", "Chronic Lung Disease Radiology", "Chronic Lung Disease Hx", "Nodule Border", "Nodule Location", "Satellite Lesions", "Nodule Pattern Cavity", "Nodule Size"]
var navigationBar = NavigationBar()
var gender = GenderView()

override func viewDidLoad() 
    super.viewDidLoad()

    //Create TableView
    tableView.frame = CGRectMake(0, self.view.bounds.height * 0.097, self.view.bounds.width, self.view.bounds.height);
    tableView.delegate = self
    tableView.dataSource = self
    tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
    self.view.addSubview(tableView)



    //Create Navigation Bar with custom class
    self.navigationBar = NavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height * 0.097))
    self.view.addSubview(navigationBar)





override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.





func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return self.items.count



func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

    var cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell

    cell.textLabel?.text = self.items[indexPath.row]

    //Cell wont turn grey when selected
    cell.selectionStyle = UITableViewCellSelectionStyle.None

    return cell



func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 

 return self.view.bounds.height * 0.095



func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
    print("You selected cell #\(indexPath.row)!")






我唯一能想到的导致此问题的是,我没有创建导航栏,而是使用自定义 UIView() 类创建了“navigationBar”。然后我在导航栏底部启动表格视图。知道如何解决这个问题吗?

这里是 NavigationBar.swift:

class NavigationBar: UIView 

var navigationBar = UIView()
var header = UILabel()
var lineBorder = UIView()

override init(frame: CGRect) 
    super.init(frame: frame)
    self.frame = frame
    setUpView()


func setUpView()


    //Create Navigation Bar
    navigationBar.frame = CGRectMake(0, 0, self.bounds.width, self.bounds.height)
    navigationBar.backgroundColor = UIColor.whiteColor()
    self.addSubview(navigationBar)

    //Create Line Border
    lineBorder.frame = CGRectMake(0, self.bounds.height, self.bounds.width, self.bounds.height * 0.005)
    lineBorder.backgroundColor = UIColor.grayColor()
    self.addSubview(lineBorder)


    header.frame = CGRectMake(0, 0, 200, 200)
    header.font = UIFont(name: "Helvetica", size: 17)
    header.text = "Nodule Risk Calculator"
    //header.backgroundColor = UIColor.blackColor()
    self.addSubview(header)
    header.translatesAutoresizingMaskIntoConstraints = false
    header.centerHorizontallyTo(navigationBar, padding: 0)
    header.centerVerticallyTo(navigationBar, padding: 9)




func hide()
    self.removeFromSuperview()



required init?(coder aDecoder: NSCoder) 
    fatalError("init(coder:) has not been implemented")



【问题讨论】:

【参考方案1】:
tableView.frame = CGRectMake(0, self.view.bounds.height * 0.097, self.view.bounds.width, self.view.bounds.height);

有问题。 origin.y 不是 0,你仍然喂整个高度。所以表格视图将在屏幕下方有一些区域

试试这个:

tableView.frame = CGRectMake(0, self.view.bounds.height * 0.097, self.view.bounds.width, 
                             self.view.bounds.height - self.view.bounds.height * 0.097);

【讨论】:

【参考方案2】:
self.navigationBar = NavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height * 0.097))
self.view.addSubview(navigationBar)

var yAxis : Float = self.navigationBar.frame.height
var tblHeight : Float = self.view.bounds.height - yAxis

tableView.frame = CGRectMake(0, yAxis, self.view.bounds.width, tblHeight)
self.view.addSubview(tableView)
tableView.delegate = self
tableView.dataSource = self
tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")

【讨论】:

以上是关于表格视图显示在屏幕下方的主要内容,如果未能解决你的问题,请参考以下文章

出现在空单元格中的表格视图分隔符

表格视图在它上面的视图下滚动而不是它

将表格视图快速添加到表格视图单元格中的问题

如何调整表格视图的大小,如果有任何数据并且表格视图中没有数据

仅在屏幕的表格区域中显示的详细信息视图?

如何在整个屏幕上滚动表格视图