UITableView返回空白单元格

时间:2016-08-20 01:49:45

标签: ios swift xcode

我有一个表格视图,单元格高度设置为自动。 在几次运行中,表中的一些单元格显示为空(空白区域)。在调试时,我注意到了' cellForRowAtIndexPath'函数像往常一样返回这些单元格此外,每次出现此错误时,控制台都会显示以下消息: "仅警告一次:检测到约束模糊地建议tableview单元格内容视图的高度为零的情况。我们正在考虑无意中崩溃并使用标准高度。"

向上和向下滚动几次可以解决问题并显示单元格。

我将以下函数用于高度:

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

    return UITableViewAutomaticDimension

}

override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

    return UITableViewAutomaticDimension
}

enter image description here

我已经坚持了一个星期,任何帮助将不胜感激!

修改:单元格代码:

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

    return posts.count

}

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

    var row = indexPath.row

    tableView.allowsSelection = false;

    let cellIdentifier = "testTableViewCell"

    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! testTableViewCell

    let post: PostMdl!

    if(row < posts.count) {

        post = posts[row]

    }
    else {
        return cell
    }

    cell.label.delegate = self

    cell.label.enabledTextCheckingTypes = NSTextCheckingType.Link.rawValue

    cell.label.userInteractionEnabled = true

    cell.brandName.text = post.brandName

    cell.timeStamp.text = post.timeStamp

    cell.brandImg.sd_setImageWithURL(post.brandImgUrl, placeholderImage: UIImage(named: "placeHolder"))


    if let img = post.postImg {
        cell.mainImg.image = img

    } else {

        cell.mainImg.image = UIImage(named:"lazyLoad")

    }

    cell.label.text = post.postTag

    cell.labelDistanceFromImg.constant = 30

    cell.labelDistanceToBtm.constant = 30

    cell.postTag = post.postTag

    cell.socNtwkImg.image = UIImage(named: post.socNtwk)


    return cell
}

2 个答案:

答案 0 :(得分:1)

我猜你已经为UITableViewCell.contentView的子视图设置了错误的约束。

此图显示我重现您的错误:

请注意正确的红色视图,它只有左上右高度,缺少底部约束,当我添加它并且它看起来不错时:

enter image description here

是的,仍有问题无法同时满足约束我们可以修改高度约束的优先级,默认优先级是必需的(1000),我们更改为高(750) ,它有效!

enter image description here enter image description here

我不知道你的细胞的细节,但错误的原因很可能,希望我的回答可以帮助你。

附加代码

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet var tableView: UITableView!
override func viewDidLoad() {
    super.viewDidLoad()
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 10
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    return tableView.dequeueReusableCellWithIdentifier("cell")!;
}


func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}
}

答案 1 :(得分:1)

iOS的手机版是什么? 在之前的iOS8版本中,我也遇到过类似的问题。 我的方法如下:

tableView.estimatedRowHeight = 88.0 tableView.rowHeight = UITableViewAutomaticDimension

希望可以帮到你