我有一个默认情况下隐藏了多个标签的自定义单元格(用户在单击单元格时看到所有内容)。我正在改变单元格的高度,cell.clipToBounds = true以隐藏标签。但是这对编辑单元格不起作用。当我开始向左滑动单元格时,会显示隐藏的内容。我注意到它起作用,如果我首先展开单元格,折叠和滑动,但如果我滑动另一个单元格,则停止工作。 任何建议如何在单元格被滑过时隐藏它?当滑动单元格时,clipToBounds不起作用
回答
将标签添加到数组中。
设置hidden
到true
:
let labels = [firstLabel, secondLabel, etc.…]
for label in labels {
label.hidden = true
}
我有许多不同的对象要隐藏,如UIImageViews和UISwitches,所以我选择了一种方法,而不是将它们放入数组中。此方法是细胞控制器内: 'FUNC hideAll(隐藏:BOOL){ mySwitch.hidden =隐藏 myLabel.hidden = hide' 我请在我的TVC内部'heightForRow'此方法。仍然不起作用。实际上,一旦意见被隐藏,它们就不会再出现。但是,当刷卡发生时,它们会出现。我在想,这可能是一个Xcode错误与刷卡进行编辑? –
我上面错了。缺乏对tableViewCell生命周期的理解导致了错误。将发布答案。 –
尝试的内容查看clipsToBounds属性设置为true。通常你不应该把细胞作为视图。
斯威夫特
cell.contentView.clipsToBounds = true
对象 -
cell.contentView.clipsToBounds = YES
我认为这是与setEditing
压倒一切的或忽略的动画和编辑期间clipsToBounds
的错误。
解决办法:
你应该隐藏所有当表“封闭”,它不应该出现的元素,并取消隐藏当表扩大。
1)创建一个UITableViewCell
方法来隐藏/显示您所需要的所有元素:
func hideAll(hide: Bool) {
myLabel.hidden = hide
myUISwitch.hidden = hide
}
2)调用上面的方法,当你初始化你的细胞。通常会在单元格内的初始化程序中被调用,或将在cellForRowAtIndexPath
上调用。我检查了cell.bounds.height
以确定细胞膨胀或不:
//cell init code
//I'm calling this method from inside the cell, so I use self here.
//If you're calling this method from your controller you should
//target the cell with cell.bounds.height, as well as targeting the
//cell to call the method: cell.hideAll(Bool)
var hidden = (self.bounds.height < 80) //change this number depending on your collapsed and expanded cell heights
hideAll(hidden)
3)在这一点(如果上面的方法被称为内部cellForRowAtIndexPath
或在小区初始化)你的方法将被调用,当细胞被创建并且每次单元格扩展为。但是,当单元格收缩时(更多未来)。因此,添加一些代码在你editingStyleForRowAtIndexPath
:
override func tableView(tableView: UITableView,
editingStyleForRowAtIndexPath indexPath: NSIndexPath)
-> UITableViewCellEditingStyle{
if let cell = tableView.cellForRowAtIndexPath(indexPath) as? CustomTableViewCell {
cell.hideAll(cell.bounds.height < 80) //calls hideAll with a Bool argument, depending on height of cell
}
return .Delete
}
editingStyleForRowAtIndexPath
被称为只在你刷卡的细胞,并且不调用任何的委托方法如heightForRowAtIndexPath
,所以我相信这是最好的庇护所你查看项目。
好的,这是解决方案。现在为什么:
当你想要隐藏这些单元格时,真正的问题是当来隐藏它们。首先,你必须了解快速通过tableViewCell
s的周期。
我假设你正在扩大/收缩heightForRowAtIndexPath
上的单元格。从语义上讲,它是完全意义上的。但是让我们假设你有3个单元格(全部可扩展)。我正在做println()
,只要调用cellForRowAtIndexPath
,didSelectRowAtIndexPath
和heightForRowAtIndexPath
。在下面的例子中,我点击第一行,然后是第二行,然后是第三行。观察控制台上的结果:
>>>> called didSelectRow at index 0
???? called heightForRow at index 0
???? called heightForRow at index 1
???? called heightForRow at index 2
???? called heightForRow at index 0
==== called cellForRow at index 0
???? called heightForRow at index 0
>>>> called didSelectRow at index 1
???? called heightForRow at index 0
???? called heightForRow at index 1
???? called heightForRow at index 2
???? called heightForRow at index 1
==== called cellForRow at index 1
???? called heightForRow at index 1
>>>> called didSelectRow at index 2
???? called heightForRow at index 0
???? called heightForRow at index 1
???? called heightForRow at index 2
???? called heightForRow at index 2
==== called cellForRow at index 2
???? called heightForRow at index 2
正如你所看到的,当你didSelectRowAtIndexPath
,heightForRowAtIndexPath
被多次调用,循环,直到SWIFT是确保它具有所有的高度正确。同时,cellForRow
仅在您选择的单元上被称为只有。
所以如果你的单元格在你选择另一个单元格时自动折叠,你必须认识到它们在折叠时没有运行任何代码(比如隐藏元素的方法),因为cellForRowAtIndexPath
仅在被抽头单元格上被调用。
您可能隐藏/取消隐藏您的heightForRow
代码,但该代码被调用了很多次,因此它并不是最优的。当你需要时,代码只能被调用一次。所以最好的解决办法IMO是调用它里面的editingStyleForRowAtIndexPath
在你UITableViewCell
子类,覆盖willTransitionToState(state: UITableViewCellStateMask)
方法和设置contentView.clipToBounds
为真这样的:
override func willTransitionToState(state: UITableViewCellStateMask) {
super.willTransitionToState(state)
contentView.clipsToBounds = true
}
从现在开始,它就会被裁剪单元格的子视图正确。
这解决了我的问题,谢谢! –
- 1. 当滑动不平滑时,UITableView使用xib设置单元格?
- 2. 当与after()一起使用时,滑动功能不起作用
- 3. 为什么ClipToBounds = false不起作用?
- 4. 当光滑网格折叠时,resizeCanvas不起作用
- 5. 在单元格上用滑动动作删除表格单元格
- 6. 右滑动有时不起作用
- 7. 滑动不起作用
- 8. DataGridView单元格对齐不起作用
- 9. ClipsToBounds在单元格中不起作用
- 10. iOS:UICollectionView单元格选择不起作用
- 11. 单元格填充不起作用
- 12. 动态创建datagridview单元格单击事件不起作用
- 13. 滑动动作单元格上的不良例外Swift
- 14. 使用RAC滑动单元格
- 15. 滑动删除单元格导致tableViewHeader与单元格移动
- 16. 使用openoffice时phpword表单元格大小不起作用
- 17. Excel Vlookup在使用单元格索引时不起作用
- 18. 当使用子内联块元素时浮动不起作用
- 19. 动态单元格高度大小不起作用
- 20. 表视图中单元格的动态高度不起作用
- 21. 革命滑块不滑动移动 - 移动触摸滑动不起作用
- 22. 当div显示时,jquery ui滑动条滚动条不起作用无
- 23. mmenu滑出菜单不起作用
- 24. 滑出菜单链接不起作用
- 25. 当在表格中设置图像时,引导滑块不起作用
- 26. 单元格下移到右侧单元格滑动删除UITableView
- 27. JQuery滑动代码不起作用
- 28. 滑动到删除不起作用
- 29. jQuery向上滑动不起作用
- 30. JavaScript平滑滚动不起作用
如果你想隐藏标签,为什么不设置'label.hidden = true'?您可以将它们放入数组或插座集合中以使其更容易。 –
亚伦,对不起,我不太确定该怎么做。试图创建一个数组,将所有这些标签添加到数组中,并使用for循环将它们全部设置为隐藏,但是我收到了一堆错误。 –
...你得到什么错误?请修改您的问题以显示您正在尝试的代码。 –