Swift UITableViewCell子视图布局更新延迟

时间:2016-09-04 15:33:10

标签: ios swift uitableview

我有一个UITableViewCell的子类和UITableViewController的子类。我用我的自定义单元格填充了tableview。

我在故事板中创建了一个UITableViewCell,使其类成为我的自定义UITableViewCell Swift文件,并为其提供了一个标识符。然后我在控制器中创建单元格:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
       let cell = tableView.dequeueReusableCellWithIdentifier("myIdentifier", forIndexPath: indexPath indexPath)
       return cell
}

在我的自定义单元格(在故事板上)我有一个具有以下约束的UIImageView:

Image View Constraints

顶部空间约束的常量为0,我认为这意味着ImageView顶部将与单元格顶部齐平。

但是,我的单元格中的图像被按下了一点:

UITableView with custom cell

白色只是表格标题,表现得非常好。但是,您可以看到图像上方出现的橙色间隙(橙色是单元格的背景颜色),我不希望那样。

我尝试在自定义单元格的awakeFromNib中设置图像框架:

@IBOutlet weak var img: UIImageView!
override func awakeFromNib() {
     img.frame = CGRectMake(0, 0, img.frame.width, img.frame.height)
}

但这没有效果,所以我尝试在layoutSubviews中设置框架:

override func layoutSubviews() {
     img.frame = CGRectMake(0, 0, img.frame.width, img.frame.height)
}

这很有效,但只有在向下滚动并备份到TableView之后才有效。前两个单元格有橙色间隙,但是如果你滚动到第三个单元格并备份,那么间隙就会消失。

有谁知道为什么会这样?如何将图像视图立即定位在(0,0),而不是仅在向下滚动并备份之后?

2 个答案:

答案 0 :(得分:1)

当我尝试重现您的情况并拖动imageView以对齐到单元格的顶部时,Xcode建议约束为-8,并且它可以正常工作但是如果我将其设置为0我得到了问题的背景颜色,尝试将顶部约束设置为-8或Xcode建议的任何颜色。

我对AutoLayout不是很熟悉所以我无法澄清Xcode为什么要将其设置为-8

答案 1 :(得分:0)

尝试通过以下代码设置tableViewCell的高度:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UIScreen.mainScreen().bounds.width
}