美文网首页
Swift开发笔记

Swift开发笔记

作者: keking | 来源:发表于2017-10-20 10:09 被阅读0次

    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中关联变量出问题了。

    image.png

    有时候对于布局出现了崩溃,一定先排查下是否在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之后调用。

    相关文章

      网友评论

          本文标题:Swift开发笔记

          本文链接:https://www.haomeiwen.com/subject/gdvmuxtx.html