在UITableView中显示所有单元格

时间:2017-03-24 18:00:36

标签: ios swift uitableview

我的快速项目中有这张表

tableView = UITableView()
tableView.dataSource = self
tableView.delegate = self
let tableViewHeight  = postTexts.count*200
tableView.estimatedRowHeight = 55
tableView.rowHeight = UITableViewAutomaticDimension
tableView.allowsSelection = false;
tableView.reloadData()
tableView.layoutIfNeeded()

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat{
        return 55
    }

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat{
    return UITableViewAutomaticDimension
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell  = UITableViewCell()
    let ProfilePicture = UIImageView()
    ProfilePicture.image = #imageLiteral(resourceName: "cole")

    let username  = UILabel()
    username.text = posters[indexPath.row]
    username.numberOfLines = 0

    let postText = UITextView()
    postText.text = postTexts[indexPath.row]
    postText.isScrollEnabled = false
    postText.isUserInteractionEnabled = false

    let border = UIView()
    border.backgroundColor = UIColor(r: 17, g: 221, b: 219)

    cell.addSubview(ProfilePicture)
    cell.addSubview(username)
    cell.addSubview(postText)
    cell.addSubview(border)

    ProfilePicture.anchor(cell.topAnchor, left:cell.leftAnchor, bottom: nil, right: nil, topConstant: 15, leftConstant: 14, bottomConstant: 0, rightConstant: 0, widthConstant: 50,heightConstant:50)
    username.anchor(cell.topAnchor, left:ProfilePicture.rightAnchor, bottom: postText.topAnchor, right: cell.rightAnchor, topConstant: 20, leftConstant: 13, bottomConstant: 0, rightConstant: 15, widthConstant: 0)
    postText.anchor(username.bottomAnchor, left:ProfilePicture.rightAnchor, bottom:nil, right: cell.rightAnchor, topConstant: 0, leftConstant: 15, bottomConstant: 0, rightConstant: 15, widthConstant: 0)
    border.anchor(postText.bottomAnchor, left:cell.leftAnchor, bottom: cell.bottomAnchor, right: cell.rightAnchor, topConstant: 20, leftConstant: 0, bottomConstant: 20, rightConstant: 0, widthConstant: 0,heightConstant:1)
    cell.layoutIfNeeded()
    cell.sizeToFit()
    return cell
}

我希望我的表格显示所有单元格,但它只显示其中一半像enter image description here

如你所见,即使有4个细胞,他也只显示2个细胞,我怎样才能改变它的行为以显示所有细胞? 这是我的表约束

tableView.anchor(PostsDiv.bottomAnchor, left:view.leftAnchor, bottom: nil, right: view.rightAnchor, topConstant: 40, leftConstant: 15, bottomConstant: 0, rightConstant: 15, widthConstant: 0,heightConstant:tableView.contentSize.height+tableView.contentInset.bottom+tableView.contentInset.top)

2 个答案:

答案 0 :(得分:0)

旧帖子中的问题仍然存在。您的单元格无法正常工作,因为您需要单元格中的自动高度,但您在tableView和单元格上设置了错误的约束。这是你问题的第三个转发,但这是你和安德里亚和我的回答:

Swift UITableViewAutomaticDimension is not working

答案 1 :(得分:0)

我使用界面构建器创建了几乎相同的UI。

https://github.com/Hapeki/Example4

我建议你在编程之前看一下这个以及AutoLayout如何工作。用户界面基于https://stackoverflow.com/a/42971009/6414904

的解释

演示视频:

demo

细胞自动调整大小,由大型lorem ipsum文本看到。如果你想让整个屏幕滚动,你应该考虑为你的tableView创建一个headerView,但这不属于这个问题的范围。在您的代码中,您可以根据单元格的数量设置tableView高度* height:let tableViewHeight = postTexts.count*200 ,这是错误的工作方式,它会在问题发生后引发问题。我强烈建议使用界面构建器(故事板)或者如果你想要一些" hybrid"方法你可以去xibs / nibs,在那里你可以创建包含outlet的View类,并在其中做一些程序化的东西。