UITableViewCell子视图报告错误的高度

时间:2016-09-16 11:38:40

标签: swift3 ios10

在转移到iOS 10,Swift 3,Xcode 8之前,以下代码正确应用了圆角。在tableView的主体中(_ tableView:UITableView,willDisplay cell:UITableViewCell,forRowAt indexPath:IndexPath):

$('#test').attr('data-mydata', "{'x-coord': 10}");

var myData = $('#test').data("mydata");
var x = myData['x-coord'];
console.log('x-coord: ' + x);

移动后,边框消失,因此前几个单元格没有圆角。单步调试使用调试器,调用方法时,子视图(someButton)高度错误。单元格使用布局约束并从故事板加载。

有人遇到过同样的事吗?

3 个答案:

答案 0 :(得分:2)

好的,我已经解决了。如果有人有兴趣,这是解决方案:

或者:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    self.tableView.visibleCells.forEach { cell in
        guard let `cell` = cell as? SomeCell else { return }
        cell.someButton.layer.cornerRadius = ceil(cell.someButton.bounds.height/2)
    }
}

或者仍然在tableView:willDisplay cell:中进行计算,只使用常量而不是依赖于子视图尺寸。

答案 1 :(得分:2)

您可以将其添加到Cell的自定义类中。请注意,从iOS 10开始,您需要调用layoutIfNeeded()来重新计算按钮大小。

 override func layoutSubviews() {
    super.layoutSubviews()
    self.someButton.layoutIfNeeded()
    self.someButton.layer.cornerRadius = self.someButton.bounds.size.height / 2
    self.someButton.clipsToBounds = true
}

答案 2 :(得分:0)

您应该将super.awakeFromNib()添加到函数awakeFromNib()中。喜欢

func awakeFromNib() {
    super.awakeFromNib()
    self.someButton.layer.cornerRadius = floor(self.someButton.frame.height/2)
}