【问题标题】:Side of TableViewCell gets cut off when applying a gradient mask应用渐变蒙版时,TableViewCell 的一侧被切断
【发布时间】:2019-09-10 05:39:13
【问题描述】:

我的 tableView 位于一个空白内容视图中,并有约束将其固定到位。该表将在容器中正常运行,但是一旦我使用下面的代码应用渐变,渐变效果很好,除了我的 tableViewCells 的右侧被切断。它仅在应用渐变时发生。任何建议将不胜感激。

在添加渐变之前,表格视图如下所示:

TableView with full TableViewCells

添加渐变后,表格视图如下所示:

TableView with cut TableViewCells

这是我用来应用渐变的代码。

        let gradientLayerMask = CAGradientLayer()
    gradientLayerMask.frame = gradientMask.bounds
    gradientLayerMask.colors = [UIColor.clear.cgColor, UIColor.white.cgColor, UIColor.white.cgColor, UIColor.clear.cgColor]
    gradientLayerMask.locations = [0.0,0.1,0.9,1.0]

    gradientMask.layer.mask = gradientLayerMask

    exerciseTable.contentInset = UIEdgeInsets(top: 15, left: 0, bottom: 0, right: 0)

【问题讨论】:

  • 渐变的目的是什么?我看不到渐变效果。显然,您只是掩盖了桌子的右侧。
  • @matt 渐变旨在淡化表格视图的顶部和底部,以便在滚动时看起来更平滑,而不是所有东西都消失的实线。
  • 好吧,我不认为它会这样做。无论如何,它的宽度显然小于表格视图的宽度。
  • @matt 我调整了垂直插入,以便在不滚动 tableview 时,渐变不可见,因此渐变本身在滚动之前不可见。我同意你所说的它比 tableview 本身更窄,但是在代码中没有任何地方我以编程方式更改了大小。我已经重新完成了所有约束以确保这些约束也是正确的。也就是说,我会继续看看我是否不小心改变了其他地方的尺寸。
  • 但是你没有显示你的代码在哪里。如果viewDidLoad 太早了。

标签: ios swift tableview gradient mask


【解决方案1】:

为渐变代码设置一些延迟

func delay(time: Double, closure:
    @escaping ()->()) {

    DispatchQueue.main.asyncAfter(deadline: .now() + time) {
        closure()
    }

}

这样使用。

delay(time: 0.2) {
    //gradient code
}

我希望它对你有用。

【讨论】:

  • 我会试试这个。请问为什么会有影响?是否有一些我不知道的影响显示的动画时间?
  • 每当你在 iPhone 5 SE 这样的小设备上设计 UI 并在 iPhone 6 这样的大设备上运行时,UI 需要一些时间才能获得原始帧,所以这里你需要为渐变设置一些延迟相关的 UI 更改。
  • 成功了!我不知道,谢谢你让我知道。这很奇怪,因为我是在 IB 的 iPhone X 上设计的,但在 iPhone XR Simulator 上运行。非常感谢,谢谢!
  • 正确的做法是将代码放在正确的位置。
猜你喜欢
  • 1970-01-01
  • 2016-07-06
  • 2021-11-21
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 2022-06-29
相关资源
最近更新 更多