initWithFrame和layoutSubviews的用法

来源:互联网 发布:淘宝上比较好的男装店 编辑:程序博客网 时间:2024/05/22 00:39

一开始看别人的代码,看到这两个词的时候,瞬间感到懵了,两个似乎都是初始化子控件,到底两个有什么区别呢?



1. initWithFrame方法是什么?


initWithFrame方法用来初始化并返回一个新的视图对象,根据指定的CGRect(尺寸)。
当然,其他UI对象,也有initWithFrame方法,但是,我们以UIView为例,来搞清楚initWithFrame方法。


2.什么时候用initWithFrame方法?
简单的说,我们用编程方式申明,创建UIView对象时,使用initWithFrame方法。
在此,我们必须搞清楚,两种方式来进行初始化UIView。
1.使用 Interface Builder 方式。
这种方式,就是使用nib文件。通常我们说的“拖控件” 的方式。


实际编程中,我们如果用Interface Builder 方式创建了UIView对象。(也就是,用拖控件的方式)
那么,initWithFrame方法方法是不会被调用的。因为nib文件已经知道如何初始化该View。(因为,我们在拖该view的时候,就定义好了长、宽、背景等属性)。
这时候,会调用initWithCoder方法,我们可以用initWithCoder方法来重新定义我们在nib中已经设置的各项属性。


2.使用编程方式。
就是我们声明一个UIView的子类,进行“手工”编写代码的方式。


实际编程中,我们使用编程方式下,来创建一个UIView或者创建UIView的子类。这时候,将调用initWithFrame方法,来实例化UIView。
特别注意,如果在子类中重载initWithFrame方法,必须先调用父类的initWithFrame方法。在对自定义的UIView子类进行初始化操作。
比如:


- (id)initWithFrame:(CGRect)frame{


    self = [super initWithFrame:frame];// 先调用父类的initWithFrame方法


    if (self) {


        


        // 再自定义该类(UIView子类)的初始化操作。


        _scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];


        [_scrollView setFrame:CGRectMake(0, 0, 320, 480)];


        _scrollView.contentSize = CGSizeMake(320*3, 480);


        


        [self addSubview:_scrollView];


    }


    return self;


}


个人总结就是程序会先执行initWIthFrame方法,把要添加的子控件添加上去,然后在计算子控件的Frame,即执行layOutSubViews方法

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 浴缸下水口漏水怎么办 浴缸下水器漏水怎么办 铁皮接头处漏水怎么办 马桶被堵死了怎么办 家里灯泡坏了怎么办 家里电路烧了怎么办 如果电脑开不了怎么办 热水器水管子漏水怎么办 淋浴头开关滴水怎么办 淋浴头一直滴水怎么办 饮水机放桶漏水怎么办 热水器热水阀门漏水怎么办 热水器热水出口漏水怎么办 热水器上水管漏水怎么办 水管往外漏水怎么办 ppr热水管漏水怎么办 大半夜水闸爆了怎么办 热水器不热水了怎么办 水龙头外皮裂了怎么办 电热水龙头坏了怎么办 太阳能存不住水怎么办 混水阀断裂漏水怎么办 洗澡淋浴头漏水怎么办 马桶有异物堵住怎么办 捷达机油盖漏油怎么办 乳化油臭了怎么办 自行车前叉严重生锈怎么办 自行车链条生锈了怎么办 自行车链子生锈了怎么办 对切削液过敏怎么办 齿轮油加到机油怎么办 机油加液压油里怎么办 液压油里面有水怎么办 加油站双层复合管漏油怎么办 预制屋面板底面渗漏怎么办 焊电焊眼睛疼怎么办 下水主管道篦子怎么办 墙里热水管堵了怎么办 热水管堵住了怎么办 热水管堵塞了怎么办 下水道被油渍堵死怎么办