跳过的坑
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
-》导致看起来文字就重复,出现阴影了:
自己此时的解决办法是:
加了对应的判断,只调用一次:
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开发心得+跳过的坑