Swift:单元格内容在每个UITableView重新加载时向下移动

时间:2016-02-18 11:07:19

标签: ios swift uitableview

我正在将自定义原型tableview单元格出列并在cellforrowatindexpath中设置变量。尽管单元格的初始加载使单元格内容在表格的顶部边框上方移动。并且每个表重新加载会使我的单元格的内容稍微向下移动。在5-6重新加载后,单元格的内容最终向下移动到正确的位置,看起来好像应该。

这是我的代码。除非我将SetView作为子视图添加到我的单元格,否则不会发生此问题,如下面的代码所示。在故事板中,我有一个原型ViewExerciseCellWithSets,其中包括(i)带有一些标签和图像的顶视图; (ii)底视图,用作SetView的设置视图容器。底部视图具有自动布局约束,顶部空间= 0相对于顶视图。要清楚,我在这里提到的“底视图”是下面代码中的cell.setViewContainer。

如果我不添加SetView,则单元格中的所有其他标签,图像等都在第一个单元格加载的适当位置并保持这种状态。有什么想法吗?

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

            var cell = tableView.dequeueReusableCellWithIdentifier("viewExerciseCellWithSets", forIndexPath: indexPath) as! ViewExerciseCellWithSets

            if (showSets) {
                for (var i=0; i < sets.count; i++ ) {
                   var frameStart = (x: CGFloat(0),y: CGFloat(0))
                    frameStart = getXYStartThreeColumns(i)
                    let  setView = NSBundle.mainBundle().loadNibNamed("StrengthSetView", owner: self, options: nil).first as! StrengthSetView
                    setView.frame = CGRectMake(frameStart.x, frameStart.y, CGFloat(170), CGFloat(30))
                    cell.setViewContainer.addSubView(setView)
                 }
             }
      }


func getXYStartThreeColumns(i:Int) -> (x:CGFloat , y:CGFloat) {
    let multiplier:Int = i/3
    if (i % 3 == 0) {
        return (CGFloat(0), CGFloat(multiplier*30))
    }
    else if (i % 3 == 1) {
        return (CGFloat(100), CGFloat(multiplier*30))
    }
    else {
        return (CGFloat(200), CGFloat(multiplier*30))
    }
}

0 个答案:

没有答案