单元格在表格视图中未正确显示

时间:2017-07-18 06:35:36

标签: ios swift uitableview

我正在使用TableView在ViewController上实现它。我面临的问题是细胞数量。目前,单元格应该返回2行,但只显示一行。

我想要实现的目标

enter image description here

故事板 - 您可以忽略除tableview之外的其他组件

enter image description here

import UIKit


class ViewController: UIViewController {

    @IBOutlet var locationTableView: UITableView!

    let locationArray = ["Current Location", "Where to"]
    let picArray = ["currentPic.png", "whereTo.png"]

    override func viewDidLoad() {
        super.viewDidLoad()


        locationTableView.delegate = self
      }
}

extension ViewController: UITableViewDelegate, UITableViewDataSource {


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return locationArray.count
    }


     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
     let cell = tableView.dequeueReusableCell(withIdentifier: "GetLocation", for: indexPath)

     let location = locationArray[indexPath.row]
     let pic = picArray[indexPath.row]
        print(location)
        if let locationCell = cell as? GetLocationTableViewCell {
            locationCell.locationTitle.text = location
            locationCell.iconImage.image = pic
        }

     return cell

     }
}

GetLocationTableViewCell.swift

    import UIKit

    class GetLocationTableViewCell: UITableViewCell {


        @IBOutlet var iconImage: UIImageView!

        @IBOutlet var locationTitle: UILabel!

        override func setSelected(_ selected: Bool, animated: Bool) {
            super.setSelected(selected, animated: animated)

            // Configure the view for the selected state
        }

    }

结果真的很奇怪

在模拟器上

enter image description here

在我的手机上

enter image description here

两个平台上的行数不同。我做错了什么?是因为限制吗?

5 个答案:

答案 0 :(得分:0)

以下问题locationArray[indexPath.section] , picArray[indexPath.section]您的部分返回0,因此您需要两次显示“当前位置”,您需要使用indexPath.row

试试这个

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
     let cell = tableView.dequeueReusableCell(withIdentifier: "GetLocation", for: indexPath)

     let location = locationArray[indexPath.row]
     let pic = picArray[indexPath.row]
        print(location)
        if let locationCell = cell as? GetLocationTableViewCell {
            locationCell.locationTitle.text = location
            locationCell.iconImage.image = pic
        }

     return cell

     }

答案 1 :(得分:0)

更改您的表委托方法,如下所示:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
     let cell = tableView.dequeueReusableCell(withIdentifier: "GetLocation", for: indexPath)

     let location = locationArray[indexPath.section]
     let pic = picArray[indexPath.row]//replace this line
        print(location)
        if let locationCell = cell as? GetLocationTableViewCell {
            locationCell.locationTitle.text = location
            locationCell.iconImage.image = pic
        }

     return cell

     }

答案 2 :(得分:0)

你可以尝试像贝娄一样。您可以编写类似

的数组
 let locationArray = [
    ["textName":"Current Location", "imageName":"currentPic"],
    ["textName":"Where to", "imageName":"whereTo"]
]

表视图协议方法如

     override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
       return 1
  }

     override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

      return locationArray.count
   }


  override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
     let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) CustomCell

    cell.textLabel?.text = locationArray[indexPath.row]["textName"]
    cell.imageView?.image = UIImage(named: locationArray[indexPath.row]["imageName"]!)

      return cell
     }

答案 3 :(得分:0)

  

替换方法cellRowAtPath

中的以下内容
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
     let cell = tableView.dequeueReusableCell(withIdentifier: "GetLocation", for: indexPath)

     let location = locationArray[indexPath.row]
     let pic = picArray[indexPath.row]
        print(location)
        if let locationCell = cell as? GetLocationTableViewCell {
            locationCell.locationTitle.text = location
            locationCell.iconImage.image = pic
        }

     return cell

}


func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 102 //Give cell height
}

答案 4 :(得分:0)

根据您的问题,我建议您管理适用于tableview和Cell的约束。在这里,我提供了遵循以获得解决方案的指示。请管理以遵循项目中的相同说明希望这将解决您的问题。

<强> 1。管理tableview约束

一个。将您的桌面视图固定在顶部,左侧

的超级视图中

湾设置tableview的 height 约束。

enter image description here

℃。为tableview创建高度约束的出口,以便我们可以在运行时改变值。 enter image description here

<强> 2。管理单元格约束

一个。将您的手机内容固定到顶部,左侧,右侧,底部的超级视图 enter image description here 第3。管理运行时的tableview约束

一个。将tableview视图的高度约束设置为从索引路径拖曳单元格的表视图的内容大小。

self.tableHeight.constant = self.locationTableView.contentSize.height

完整控制器代码。

//  Controller.swift
//  Copyright © 2017 dip. All rights reserved.
//

import UIKit


class ViewController1: UIViewController {

    //1:
    //Outlet of tableview Height constraints
    @IBOutlet weak var tableHeight: NSLayoutConstraint!

    @IBOutlet var locationTableView: UITableView!

    let locationArray = ["Current Location", "Where to"]
    let picArray = ["currentPic.png", "whereTo.png"]

    override func viewDidLoad() {
        super.viewDidLoad()

        locationTableView.delegate = self
    }
}

extension ViewController1: UITableViewDelegate, UITableViewDataSource {


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return locationArray.count
    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "GetLocation", for: indexPath)

        let location = locationArray[indexPath.row]
        let pic = picArray[indexPath.row]
        print(location)
        if let locationCell = cell as? GetLocationTableViewCell {
            locationCell.locationTitle.text = location
            locationCell.iconImage.image = pic
        }

        //2. set tableivew view height to content Height
        self.tableHeight.constant = self.locationTableView.contentSize.height


        return cell

    }
}

输出

enter image description here