聚焦自定义 UITableCell 时移除细边框
Posted
技术标签:
【中文标题】聚焦自定义 UITableCell 时移除细边框【英文标题】:Remove thin-like border when focusing a custom UITableCell 【发布时间】:2016-12-06 15:31:38 【问题描述】:问题:
如何在聚焦自定义 UITableCell 时去除细细的白色边框?
(老实说它与单元格的边框无关,我尝试修改边框的颜色以查看)
说明:
这似乎只发生在我通过情节提要为表格单元格保留默认焦点样式时,当我删除单元格上的默认焦点动画时,白色边框不会出现(但我必须实现自己的自定义动画..)
我尝试过使用不同的颜色和色调,但似乎没有用。
上面的 gif 显示了聚焦特定 UITableCell 时出现的白色边框
我的 UITableViewController 故事板的屏幕截图。
上图是 UITableViewCell 属性检查器的截图
上图是我的 UITableViewCell 的 Content View 的属性检查器截图
上图是 UITableView 属性检查器的截图
【问题讨论】:
你尝试改变 cell.layer.borderColor 了吗? @ArpitDongre 我做到了。单元格的“边界”和我在聚焦单元格时得到的效果是不同的。单元格边框的宽度小于您在 gif 中看到的效果(它确实具有相同的高度)。同样在下拉或拉起时,可以从所有 4 个侧面看到效果。 你能告诉我你在 UITableViewCell 中使用的不同颜色,以及焦点样式以便我模拟它吗? @ArpitDongre 我已经添加了图像,但我想我不会长时间保留它们。它们很大……让我知道这是不是你想看到的。还有我为表格单元格的背景颜色选择的特定颜色......它们可以是任何东西。无论背景颜色如何,都会出现这种效果。 你是如何改变焦点颜色的,你使用的是自定义的 tableview 单元格吗? 【参考方案1】:更新:
不是边框,而是阴影。现在UITableViewCellFocusStyle.default
可能在对焦时为单元格设置阴影,当您滚动时,即使隐藏它,阴影也会在短时间内可见。
你可以像这样隐藏阴影:
func tableView(_ tableView: UITableView, didUpdateFocusIn context: UITableViewFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator)
if let cell = context.nextFocusedView as? CustomTableViewCell
cell.layer.shadowOpacity = 0
cell.layer.masksToBounds = true
//other configurations
注意1:使用上述代码会出现短时间的阴影。使用下面的代码没有阴影。
或者,您可以使用UITableViewCellFocusStyle.custom
并像这样手动提供没有阴影的默认焦点动画:
func tableView(_ tableView: UITableView, didUpdateFocusIn context: UITableViewFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator)
let xScale = 1.008
let yScale = 1.008
if let cell = context.nextFocusedView as? CustomTableViewCell
coordinator.addCoordinatedAnimations( () -> Void in
cell.transform = CGAffineTransform(scaleX: CGFloat(xScale), y: CGFloat(yScale))
, completion: nil)
if let previous = context.previouslyFocusedView as? CustomTableViewCell
coordinator.addCoordinatedAnimations( () -> Void in
previous.transform = CGAffineTransform.identity
, completion: nil)
注意:
尝试使用 xScale 和 yScale 值以获得更好的动画效果。
【讨论】:
绝对是一个改进!谢谢 !然而,这些线条仍然偶尔可见。任何想法为什么? 您好,很抱歉没有回复您!实际上,它并没有增加任何视觉差异(从我的角度来看)。似乎 maskToBounds 效果更好。也许有些东西我不太明白。我还注意到设置 cell.layer.backgroundColor 确实“隐藏”了不需要的阴影效果。【参考方案2】:将您的单元格焦点样式更改为自定义
【讨论】:
是的,我知道它会删除白色“边框”,但它也会删除我认为很重要的默认动画,这不是我想要的。以上是关于聚焦自定义 UITableCell 时移除细边框的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 上使用 setBackgroundImage 时移除 UIButton 的阴影
在自定义 UITableCell 中从 UITextField 调用 textFieldShouldReturn 时遇到问题