聚焦自定义 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)
    
     

注意:

尝试使用 xScaleyScale 值以获得更好的动画效果。

【讨论】:

绝对是一个改进!谢谢 !然而,这些线条仍然偶尔可见。任何想法为什么? 您好,很抱歉没有回复您!实际上,它并没有增加任何视觉差异(从我的角度来看)。似乎 maskToBounds 效果更好。也许有些东西我不太明白。我还注意到设置 cell.layer.backgroundColor 确实“隐藏”了不需要的阴影效果。【参考方案2】:

将您的单元格焦点样式更改为自定义

【讨论】:

是的,我知道它会删除白色“边框”,但它也会删除我认为很重要的默认动画,这不是我想要的。

以上是关于聚焦自定义 UITableCell 时移除细边框的主要内容,如果未能解决你的问题,请参考以下文章

如何制作可拉伸的自定义 UITablecell

单击时移除 QPushButton 周围的方格边框

在 iOS 上使用 setBackgroundImage 时移除 UIButton 的阴影

在 UITableView 中滚动时移除 UIView

android EditText,单击另一个对象时移除焦点

在自定义 UITableCell 中从 UITextField 调用 textFieldShouldReturn 时遇到问题