1,tableview点击选中效果,放开点击后选中效果消失。只需重写tableview的delegate方法
@available(iOS 6.0, *)
public func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool{
return true
}
@available(iOS 2.0, *)
public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
tableView.cellForRow(at: indexPath)?.isSelected = false
}
2,使用collectionview时出现错误,使用的是storyboard进行布局,由于多个collectionview使用同一个cell类,第一个collectionview没问题,后面几个都出现如下错误
“terminating with uncaught exception of type NSException”
分析原因时以为是不能复用或者说复用出现了问题,后面发现时storyboard中关联变量出问题了。
有时候对于布局出现了崩溃,一定先排查下是否在storyboard中这些引用失效了,如果在storyboard中还有关联,但是实际代码中去掉了,就会关联失败导致崩溃。
3,SDWebImage再collectionview的cell中加载图片出现错乱
错乱的原因肯定是reuse造成的,我这边出现这个原因的场景是item可增加和删除,在图片加载的过程总,删除这个item,就会出现删除的item原来要显示的图片显示在别的item上了。解决方案是在item的prepareForReuse中加入以下代码,记得两句都要加,只加第一句有时候解决不了问题
override func prepareForReuse() {
defaultimg.sd_cancelCurrentImageLoad()
defaultimg.image = UIImage(named:"edit_avatar_default")
}
这个地方需要注意的一个坑是如果使用的是kingfish框架加载图片,用同样的处理方式,仍然会有图片错乱。
kingfish框架对这类问题的处理如下:
override func prepareForReuse() {
background.kf.cancelDownloadTask()
background.kf.setImage(with: nil)//这句不能少,少了之后也会出现错乱
background.image = nil
}
4,计算UILabel的宽度
如果有多个view,放置一行,然后整体居中,对于多语言支持的UILabelview,由于是设置文字之后才知道宽度,所以需要在设置文字后,再通过调整constraints来让view居中
但是在使用nameLabel.frame.width来计算宽度时,发现设置不同的text返回的长度还是一样的。实际上应该是用
nameLabel.intrinsicContentSize.width
这句代码应该是在设置完了text之后调用。