今天在使用代码自定义UITableViewCell时, 想通过cell的高度来约束按钮的Y,
按钮的frame我是这样加的:
显示结果却是这样的:
出现这种情况的原因在于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开发的道路上走的长远的青年...