【问题标题】:UITableViewCell: subviews shadows cut off by other cells and outside of table view?UITableViewCell:被其他单元格和表格视图外部切断的子视图阴影?
【发布时间】:2021-04-25 16:26:11
【问题描述】:

我有一个单元格的设计,垂直间距为 10 像素。我想在这些单元格周围设置阴影(实际上我将这些阴影应用于每个单元格的子视图),但这是我得到的结果:

如您所见,阴影被其他单元格和表格视图页眉/页脚截断。

这是我的代码:

视图控制器

final class SCVC: UIViewController {
    @IBOutlet weak var tableView: UITableView! {
        didSet {
            tableView.backgroundColor = .clear
            tableView.separatorStyle = .none
        }
    }

    override func viewDidLoad() {
        tableView.register(UINib(nibName: "ShadowCell", bundle: .main), forCellReuseIdentifier: "ShadowCell")
        view.backgroundColor = .white
    }
}

extension SCVC: UITableViewDataSource, UITableViewDelegate {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 4
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        return tableView.dequeueReusableCell(withIdentifier: "ShadowCell", for: indexPath) as! ShadowCell
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 100
    }
    
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let headerView = UIView(frame: CGRect(origin: .zero,
                                              size: CGSize(width: tableView.bounds.width,
                                                           height: 20)))
        headerView.backgroundColor = .clear
        let label = UILabel(frame: CGRect(origin: CGPoint(x: 16, y: 8),
                                          size: CGSize(width: headerView.frame.width - 32,
                                                       height: 34)))
        label.backgroundColor = .clear
        label.text = "Header view"
        headerView.addSubview(label)
        return headerView
    }
    
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 50
    }
    
    func tableView(_ tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {
        return 50
    }
}

细胞

final class ShadowCell: UITableViewCell {
    @IBOutlet weak var innerView: UIView! {
        didSet {
            innerView.backgroundColor = .white
            innerView.layer.cornerRadius = 10.0
            innerView.layer.shadowColor = UIColor.black.withAlphaComponent(0.2).cgColor
            innerView.layer.shadowOpacity = 1.0
            innerView.layer.shadowRadius = 24.0
            innerView.layer.shadowOffset = CGSize(width: 0, height: 8)
        }
    }
}

单元格 XIB

我该如何解决这个问题?

感谢您的帮助

【问题讨论】:

    标签: ios uitableview shadow


    【解决方案1】:

    一般来说,如果有东西被剪裁,可能有以下主要原因:

    1. clipsToBounds 设置为 true。
    2. 背景颜色不清晰

    所以要解决您的问题,您需要修复单元格及其内容视图的问题。您可以在您的 xib 或代码中执行此操作:

    cell.clipsToBounds = false
    cell.contentView.clipsToBounds = false
    cell.backgroundColor = .clear
    cell.contentView.backgroundColor = .clear
    

    【讨论】:

    • 感谢您的回答!通过使用调试视图层次结构工具,我意识到出了什么问题,我没有剪裁的 UI 的唯一部分是 cell.contentView
    • 效果很好。在 cell 和 cell.contentView 上都需要将 clipsToBounds 设置为 false。
    猜你喜欢
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2014-04-13
    • 1970-01-01
    相关资源
    最近更新 更多