TableView 中 UIView 的 CAGradientLayer 未调整为自动布局

Posted

技术标签:

【中文标题】TableView 中 UIView 的 CAGradientLayer 未调整为自动布局【英文标题】:CAGradientLayer of UIView in TableView not resizing to Autolayout 【发布时间】:2015-02-05 10:34:06 【问题描述】:

我在 IB 中创建了一个带有标签的 UIView:6。我在 tableView 中使用它。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    var cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell

    // create background view
    var backgroundView =  cell.contentView.viewWithTag(6) as UIView!
    backgroundView.layer.cornerRadius = 10
    backgroundView.layer.masksToBounds = true

    // create gradient layer
    let gradient : CAGradientLayer = CAGradientLayer()

    // create color array
    let arrayColors: [AnyObject] = [
        UIColor (red: 33/255, green: 33/255, blue: 39/255, alpha: 1).CGColor,
        UIColor (red: 24/255, green: 24/255, blue: 28/255, alpha: 1).CGColor]

    // set gradient frame bounds to match view bounds
    gradient.frame = backgroundView.bounds

    // set gradient's color array
    gradient.colors = arrayColors

    gradient.startPoint = CGPoint(x: 0.0, y: 0.0)
    gradient.locations = [0.1, 0.9]
    gradient.endPoint = CGPoint(x: 1, y: 1)

    // replace base layer with gradient layer
    backgroundView.layer.insertSublayer(gradient, atIndex: 0)

问题是,虽然 backgroundView 调整为 Autolayout,但渐变层却没有,正如我所期望的那样:

    gradient.frame = backgroundView.bounds

我在 TableView 单元格中找不到任何适用于 UIView 的答案。

问题:在 TableView 中强制应用到 UIView 的图层使用自动布局调整大小的正确代码是什么?

【问题讨论】:

【参考方案1】:

我认为您可以尝试将 UITableViewCell 子类化,然后将 CAGradientLayer 作为其默认层。

那么它的大小应该遵循它的等效视图,虽然我没有测试它。

【讨论】:

请注意,表格视图单元格具有背景视图、选定背景视图、多选背景视图和内容视图的现有层次结构。在对其视图和图层进行更改之前请三思。【参考方案2】:

这就是你要找的答案:https://***.com/a/4111917/2831015

子类 UIView 并将其用作您的“背景视图”。通过将图层类覆盖为 CAGradientLayer,您无需将渐变添加为子图层,这样您的渐变将根据父图层自动调整大小。

【讨论】:

谢谢,这是 Swift 中自定义 UIView 实现自动调整大小的另一个实现:***.com/questions/29111099/… @karlml 我尝试使用 layoutSublayersOfLayer 来调整渐变的大小,但在设备旋转期间没有发生(这是我需要重新计算它的时候),并且总是落后一个阶段。 使用我链接的解决方案,我知道它在我当前的应用程序中工作;-) 如果您有困难,请告诉我,我会解释

以上是关于TableView 中 UIView 的 CAGradientLayer 未调整为自动布局的主要内容,如果未能解决你的问题,请参考以下文章

TableView 中 UIView 的 CAGradientLayer 未调整为自动布局

UIView 动画打破 TableView

如何在 TableView 中居中自定义 UIView?

如何在tableview标题中更改uiview的高度

需要 UIView 中的 tableview 分组背景?

UIView 和 TableView 可调整大小