Swift UITableViewCell separatorStyle 在 iPhone MIni 上打破了自动布局

Swift UITableViewCell separatorStyle breaking autolayout on iPhone MIni

我有一个 UITableView,它有一个包含 UIImageView 的 UITableViewCell。

设置约束,使 UIImageView 在顶部和侧面有 20 个填充点,大小比为 1:1,因此无论设备宽度如何,UIImageView 始终为正方形。

我将 cornerRadius 应用于 UIImageView,因此图像是圆形的。

但是....自动布局似乎在第一次加载时不起作用。但在第一次加载后,它运行完美。

我已经尝试了 setNeedsLayout 或 layoutIfNeeded 的所有已知组合 - 在 UITableViewCell 内部和 UITableView 代码中。第一次加载时没有任何效果。

请帮忙!

代码如下所示:

class CircularProfileCell: UITableViewCell {

    @IBOutlet weak var circularView: UIView!
    
    func setup() {
        circularView.layer.cornerRadius = circularView.bounds.height / 2
    }
}

class CircularProfileVC: UITableViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.separatorStyle = .none
        self.tableView.register(UINib(nibName: "CircularProfileCell", bundle: nil), forCellReuseIdentifier: "CircularProfileCell")
    }
    
    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "CircularProfileCell", for: indexPath) as! CircularProfileCell
        cell.setup()
        return cell
    }
}

设置如下所示:

因为圆角半径是 layer 属性 它并不总是能很好地与自动布局配合使用。另外,我猜你是用视图的框架属性设置的(即imageView.layer.cornerRadius = imageView.bounds.height/2)。 因此,您应该尝试在单元格的 layoutSubviews() 函数上设置角半径。这将确保呈现正确的尺寸

override func layoutSubviews() {
  super.layoutSubviews()
  imageView.layer.cornerRadius = imageView.bounds.height/2
  ...
}

只有当 tableView.separatorStyle = .none

为了解决这个问题,我只是让分隔符保持打开状态,但将分隔符颜色设置为透明

self.tableView.separatorStyle = .singleLine
self.tableView.separatorColor = UIColor.clear

感谢@CloudBalacing 的帮助。有关此问题的更多信息