Swift开发---如何正确获取自定义cell的frame

今天在使用代码自定义UITableViewCell时, 想通过cell的高度来约束按钮的Y,
按钮的frame我是这样加的:


4D6D7EE5-FA4C-4C83-9D5A-762CB4A32FF5.png

显示结果却是这样的:


Swift开发---如何正确获取自定义cell的frame_第1张图片
5446AC9A-4AE2-4E6C-BA37-E477252E6C37.png

出现这种情况的原因在于UITableView的代理方法先后顺序问题.
我们都知道UITableView的返回cell高度方法先于返回cell方法执行,此时cell高度已经确定了,但是并不会对cell的frame进行设置(在返回cell方法执行时设置cell的frame), 而按钮设置的顺序介于两者之间, 所以此时获取的cell高度为默认高度(44),就出现了上图出现的结果.

解决方法:
将按钮的设置放到主线程队列最后, 代码如下:
weak var weakSelf = self
DispatchQueue.main.async {
weakSelf?.unfolodButton = UIButton(frame: CGRect(x: (weakSelf?.frame.maxX)! - 61, y: (weakSelf?.contentView.bounds.size.height)! - 26, width: 46, height: 15))
weakSelf?.contentView.addSubview((weakSelf?.unfolodButton)!)
}

修改后的结果:

Swift开发---如何正确获取自定义cell的frame_第2张图片
090298BE-803D-408B-87E7-8C774338D4F2.png

当然在开发中如果频繁的使用主线程的方法, 就要考虑代码有没有问题了, 谨慎使用

一个想要在Swift开发的道路上走的长远的青年...

你可能感兴趣的:(Swift开发---如何正确获取自定义cell的frame)