我有一个自定义的tableView,但它的设计方式使得只有一半的单元格可见时底部和顶部都很难看。见图片参考:
我希望只有当你看到100%的细胞时,底部(和碾压后的顶部)才可见。
我试过这个来检查单元格是否完全可见,但我相信cellForRowAtIndexPath会在部分可见时创建reusableCells,并且当它完全可见时不会再次调用:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var myCell:ChooseStoryCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! ChooseStoryCell
var cellRect = self.tableView.rectForRowAtIndexPath(indexPath)
var completelyVisible = CGRectContainsRect(self.tableView.bounds, cellRect)
if completelyVisible == true {
myCell.hidden = false
myCell.backgroundColor = Color.sharedColors().colorsArray[5]
myCell.storyLabel.text = stories[indexPath.row].name
myCell.circleView.layer.cornerRadius = 15
}
else{
myCell.hidden = true
}
我将如何继续前进? 任何帮助都会受到极大的关注!
答案 0 :(得分:1)
将表视图放在父UIView中。从tableview顶部到父视图顶部的边距应该等于单元格的高度,从底部开始,表视图的宽度应与其父视图的宽度相同,左右边距等于零。所以顶部/底部只有额外的空间来显示一个单元格。
在tableview上将clipsToBounds设置为NO,在父视图上确保clipsToBounds设置为YES。
行为应该是这样的,当滚动单元格时,它将一直可见,直到它到达父视图的顶部边界并立即消失。
或者,您也可以降低tableview的高度,将其向下移动并将clipsToBounds设置为NO。它应该这样做。但我更喜欢嵌入View以确保不会在外面显示任何内容。
答案 1 :(得分:1)
这是一个刚刚出现的代码。未经测试。
基本思想是查看单元格框架与表格视图边界的交集,如果结果是单元格的框架,则单元格框架完全可见。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var myCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell
var cellRect = tableView.rectForRowAtIndexPath(indexPath)
var completelyVisible = cellRect.rectByIntersecting(tableView.bounds) == cellRect
if completelyVisible == true {
myCell.contentView.hidden = false
}
else{
myCell.contentView.hidden = true
}
return myCell
}