我正在将自定义原型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))
}
}