如何正确地使具有动态高度的表格视图单元格的边缘变圆

利亚姆

我的一个表格视图有问题。我正在为我的应用程序编写一个消息传递页面,该页面使用表格视图显示发送和接收的消息。表格单元格需要根据每个单元格的内容更改高度。我的大小调整工作正常,但是现在需要调整单元格边缘以适合UI设计。我过去使用非动态高度完成此操作的方式是通过调用一个函数来使tableViewCell中的覆盖函数“ layoutSubViews()”中的每个角变圆:

    func roundAllCorners(radius: CGFloat) {
        let allCorners: UIRectCorner = [.topLeft, .bottomLeft, .bottomRight, .topRight]
        let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: allCorners, cornerRadii: CGSize(width: radius, height: radius))
        let mask = CAShapeLayer()
        mask.path = path.cgPath
        self.layer.mask = mask
    }

如果我尝试调用此函数,但是单元格是动态调整大小的,则左边缘会切掉半厘米。如果您将单元格从屏幕上滚动出来,然后将其修复,则再次返回。希望您能找到解决我的问题的方法,颈部一直疼了一段时间。谢谢。

Matic Oblak

可能还需要覆盖框架的setter并在其中调用它。无论如何,由于多种原因,这不是一个好主意。问题是表格视图单元格具有许多视图(包括本身就是一个视图),如内容视图和背景视图...

我建议您在内容视图上添加另一个视图,以容纳所有单元格视图。然后将此视图作为子类并处理其中的所有舍入。因此,从情节提要板的角度来看,您将遇到以下情况:

- UITableViewCell
    - contentView
        - roundedContainer
            - imageView
            - button
            - label
            ...

圆角视图具有(或应该具有)约束,因此layoutSubViews应该足够覆盖以设置拐角半径。

您可以拥有一个整洁的类,可以像这样对视图进行四舍五入:

class RoundedView: UIView {

    @IBInspectable var cornerRadius: CGFloat = 0.0 {
        didSet {
            refresh()
        }
    }
    @IBInspectable var fullyRounded: Bool = false {
        didSet {
            refresh()
        }
    }


    override func layoutSubviews() {
        super.layoutSubviews()
        refresh()
    }

    private func refresh() {
        layer.cornerRadius = fullyRounded ? min(bounds.width, bounds.height) : cornerRadius
    }

}

正如@iDeveloper所提到的,最好使用cornerRadius一个层。但是,如果您需要使用形状图层,则在此类中也可以这样做。

确保在此视图上裁剪边界。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用最小高度的单元格自动调整表格视图

重新加载单元格后向上滚动时具有动态单元格高度的UITableView

UITableViewCell内部的UITableView具有动态单元格高度

如何使用Swift创建具有动态单元格高度的静态单元格

iOS表格视图具有自定义子视图的单元格自动高度

一些具有动态高度的tableview单元格,其他具有固定高度的单元格

如何正确调整表格视图单元格的大小?

如何为具有动态高度的表格单元格正确设置自动布局?

如何以编程方式扩展和折叠具有动态高度的tableview单元格?

如何在iOS中更改内部表格视图单元格的单元格高度?

具有圆角边缘的自定义表格视图单元格

如何快速设置集合视图单元格的动态高度?

如何正确地将UITableView单元格子视图放置在右侧?

iOS 8以不正确的高度显示表格视图单元格的内容

表格视图的动态单元格高度

如何展开表格视图单元格?

使用动态单元格高度时,将表格视图滚动到底部

表格视图中单元格的动态高度不起作用

如何在具有基本样式的表格视图单元格中将图像设置为右侧

动态具有多个 colspan 的表格单元格

如何展开表格视图单元格?

如何以编程方式设置具有动态高度和动态单元格宽度的 UICollectionView?

根据表格的单元格内容动态适应表格视图的高度到滚动视图中

UITableView 中的最后一个单元格始终与表格中最高的单元格具有相同的高度?

如何在具有动态添加的行和单元格的表格中拖放单元格内容?

如何在消耗性表格视图单元格内制作动态集合视图

单元格内有文本时如何获取表格单元格的正确高度

如何将工作区正确地网格化为 nxm 单元格

如何在具有动态单元格高度的 UICollectionView 中实现平滑的展开/折叠动画?