在 UITableView 中,如何在隐藏行后关闭行的底部边框?
Posted
技术标签:
【中文标题】在 UITableView 中,如何在隐藏行后关闭行的底部边框?【英文标题】:In a UITableView, how do I close the bottom border of a row after hiding the row after it? 【发布时间】:2017-02-11 16:13:15 【问题描述】:这就是我所说的“关闭底部边框”的意思:
第二行当前处于“隐藏”状态(其高度设置为 0)。当用户单击第一行时,会出现第二行(其高度已恢复)。如果有帮助,这里是隐藏和显示第二行的代码。
首先,我有一个成员变量,用于存储第二行是否打开(它是带有选择器视图的行):
var referenceLengthPickerIsOpen: Bool = false
以下是确定高度的方法:
override func tableView(_ tableView: UITableView,
heightForRowAt indexPath: IndexPath) -> CGFloat
if indexPath.section == 0 && indexPath.row == 1
return referenceLengthPickerIsOpen ? 216.0 : 0.0
return super.tableView(tableView, heightForRowAt: indexPath)
以下是用户单击第一行以显示或隐藏第二行时的处理代码:
override func tableView(_ tableView: UITableView,
didSelectRowAt indexPath: IndexPath)
self.tableView.deselectRow(at: indexPath, animated: true)
if indexPath.section == 0 && indexPath.row == 0
referenceLengthPickerIsOpen = !referenceLengthPickerIsOpen
tableView.beginUpdates()
tableView.endUpdates()
显示和隐藏部分效果很好,当第二行的高度从 0 变为 216 时,动画效果很好,反之亦然。
但是,在隐藏第二行之后,我留下了上图所示的边框间隙。我知道原因:底部边框只对最后一行关闭,目前是隐藏的。
我试图通过改变这样的行数来解决这个问题:
override func tableView(_ tableView: UITableView,
numberOfRowsInSection section: Int) -> Int
if section == 0
return referenceLengthPickerIsOpen ? 2 : 1;
return super.tableView(tableView, numberOfRowsInSection: section)
但这只会在我点击第一行时让我的应用崩溃。
【问题讨论】:
我相信底部边框可能是UITableView
分隔线。如果不是,请告诉我。
这一行referenceLengthPickerIsOpen ? 2 : 1
应该可以正常工作。你能把崩溃报告给我看一下吗?
【参考方案1】:
转到情节提要,选择单元格转到分隔符,自定义插入并将其设为0。下面是图像。
更新:
【讨论】:
谢谢。但是每个部分的页脚边距也变为零,这使得文本正好靠在视图的左边缘。 在我的示例中,我不会发布另一张图片。 有趣。我想知道为什么我的页脚的边距会随着插图的变化而变化。无论如何,设置表格视图的插图的问题在于它会影响所有行。我实际上希望行有一个插入,除非下一行被隐藏(使上一行成为最后一行,所以它应该有一个完整的底部边框)。 如果tableView是静态的,不要在tableview自定义插入中做,对tableViewCell做。我将添加另一张图片向您展示另一个示例 谢谢,成功了。因为我确实想要在显示第二行时插入,所以我动态地将插入更改回显示第二行时的状态,并在隐藏时返回 .zero。【参考方案2】:我相信底部边框可能是UITableView
的默认分隔线。如果这是真的,将UITableView
的separatorInset
设置为0 应该可以解决问题
您可以通过以下方式进行。
self.tableView.separatorInset = UIEdgeInsets.zero
上面的代码关闭了底部边框。
您可以通过隐藏分隔符来隐藏底部边框。
self.tableView.separatorColor = UIColor.clear
如果它解决了问题,请告诉我。
【讨论】:
谢谢。它几乎可以工作。我在viewDidLoad()
方法中将separatorInset
设置为零,但这也会导致页脚左边距为零,因此文本正好靠在左边缘。以上是关于在 UITableView 中,如何在隐藏行后关闭行的底部边框?的主要内容,如果未能解决你的问题,请参考以下文章
在 UITableView 中插入一些行后,它在 ios 7 中没有滚动
Iphone:UITableView 标题行在 6 行后重复
Swift 中的 UITableView 无法识别 UINavigationBar,填充已关闭,部分 tableview 被隐藏