我有一个表格视图,单元格高度设置为自动。 在几次运行中,表中的一些单元格显示为空(空白区域)。在调试时,我注意到了' cellForRowAtIndexPath'函数像往常一样返回这些单元格此外,每次出现此错误时,控制台都会显示以下消息: "仅警告一次:检测到约束模糊地建议tableview单元格内容视图的高度为零的情况。我们正在考虑无意中崩溃并使用标准高度。"
向上和向下滚动几次可以解决问题并显示单元格。
我将以下函数用于高度:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
我已经坚持了一个星期,任何帮助将不胜感激!
修改:单元格代码:
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
}
答案 0 :(得分:1)
我猜你已经为UITableViewCell.contentView的子视图设置了错误的约束。
请注意正确的红色视图,它只有左上右高度,缺少底部约束,当我添加它并且它看起来不错时:
是的,仍有问题无法同时满足约束,我们可以修改高度约束的优先级,默认优先级是必需的(1000),我们更改为高(750) ,它有效!
我不知道你的细胞的细节,但错误的原因很可能,希望我的回答可以帮助你。
附加代码
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
希望可以帮到你