最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【整理】swift开发心得+跳过的坑

Swift crifan 2161浏览 0评论

跳过的坑

layoutSubviews中尽量不要添加subview

否则:
每次页面重新布局显示
(不如进入子页面后再返回当前页面,此时也会调用layoutSubviews的)
此时导致的是:
add的subview,会被多次添加
比如:
我之前在一个继承了UITableViewCell的ConversationTableViewCell中:
class ConversationTableViewCell: UITableViewCell {
    var atMeStr:String = ""

    override func layoutSubviews() {
        super.layoutSubviews()
        self.detailTextLabel?.addSubview(atMeAndDetailLabel)
    }
}

第一次显示,是正常的:

但是多次进入子页面后再返回
-》layoutSubviews被调用多次
-》addSubview被调用多次
-》多次add了atMeAndDetailLabel
-》导致看起来文字就重复,出现阴影了:
first show test ok again bold
自己此时的解决办法是:
加了对应的判断,只调用一次:
        if !atMeStr.isEmpty {
            //check for if already added, then not add
            //-> prevent duplicated add atMeAndDetailLabel
            let detailTextSubview = self.detailTextLabel?.subviews
            if detailTextSubview?.count == 0
            {
                self.detailTextLabel?.addSubview(atMeAndDetailLabel)
            }
        }
心得是:
layoutSubviews中就应该只是调节布局
-》而不应该添加子的视图
-》如果非得添加子视图
-》那么记得要判断条件,保证只添加一次
-》否则每次页面重新布局,都会导致add subview
-》就会导致页面显示出问题了

心得

类型Types:

Swift中有个基本的概念,叫做:Types类型,和Class类概念上有点类似。
Swift类型:
  • 命名类型:基本结构,都可以有自己的成员变量和方法
    • 类 (class)
    • 结构体 (struct)
      • Int
      • String
      • Array
      • Dictionay
    • 枚举 (enum)
    • 接口 (protocol)
  • 复合类型:
    • 函数 (func)
    • 多元组 (tuple)
Cocoa 框架中的类,基本都被映射为了 Swift 的 class

转载请注明:在路上 » 【整理】swift开发心得+跳过的坑

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
85 queries in 0.188 seconds, using 22.11MB memory