UI基础之frame模型的使用

Posted 忆缘晨风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UI基础之frame模型的使用相关的知识,希望对你有一定的参考价值。

知识点(一):关于重写构造方法的三种方式的思考:

- (instancetype)init
{
    self = [super init];
    if (self) {
         NSLog(@"%s",__func__);
    }
    return self;
}


- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        NSLog(@"%s",__func__);
    }
    return self;
}
/**
 *  代码为什么要写在initWithStyle 方法中
 *
 * 当代码是提供给别人使用的时候,一定要充分考虑别人会怎么使用
 *  要保证自己的代码,无论别人怎么去调用,都能调用到
 */
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        NSLog(@"%s",__func__);
    }
    return self;

}

1.当调用的时候,假设对象是p,那么[[p alloc]init]的时候

调用顺序和结果为:

2017-05-03 17:30:07.737 11-微博[2376:644294] -[HMWeiboCell initWithStyle:reuseIdentifier:]
2017-05-03 17:30:07.737 11-微博[2376:644294] -[HMWeiboCell initWithFrame:]
2017-05-03 17:30:07.738 11-微博[2376:644294] -[HMWeiboCell init]
2017-05-03 17:30:08.110 11-微博[2376:644294] -[HMWeiboCell initWithStyle:reuseIdentifier:]
2017-05-03 17:30:08.111 11-微博[2376:644294] -[HMWeiboCell initWithFrame:]
2017-05-03 17:30:08.113 11-微博[2376:644294] -[HMWeiboCell init]
2017-05-03 17:30:08.116 11-微博[2376:644294] -[HMWeiboCell initWithStyle:reuseIdentifier:]
2017-05-03 17:30:08.117 11-微博[2376:644294] -[HMWeiboCell initWithFrame:]
2017-05-03 17:30:08.118 11-微博[2376:644294] -[HMWeiboCell init]

结果显示为三种方法都会被调用

2.当[[p alloc]initWithFrame:CGRectZero];的时候

调用顺序和结果为:

2017-05-03 17:37:26.351 11-微博[2405:649389] -[HMWeiboCell initWithStyle:reuseIdentifier:]
2017-05-03 17:37:26.351 11-微博[2405:649389] -[HMWeiboCell initWithFrame:]
2017-05-03 17:37:26.409 11-微博[2405:649389] -[HMWeiboCell initWithStyle:reuseIdentifier:]
2017-05-03 17:37:26.409 11-微博[2405:649389] -[HMWeiboCell initWithFrame:]
2017-05-03 17:37:26.410 11-微博[2405:649389] -[HMWeiboCell initWithStyle:reuseIdentifier:]
2017-05-03 17:37:26.411 11-微博[2405:649389] -[HMWeiboCell initWithFrame:]

3.当[[p alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseId];的时候:

调用顺序和结果为:

2017-05-03 17:38:42.427 11-微博[2424:651531] -[HMWeiboCell initWithStyle:reuseIdentifier:]
2017-05-03 17:38:42.463 11-微博[2424:651531] -[HMWeiboCell initWithStyle:reuseIdentifier:]
2017-05-03 17:38:42.464 11-微博[2424:651531] -[HMWeiboCell initWithStyle:reuseIdentifier:]

知识点(二)cell中会经常碰到[self.contentView addSubview:nameLabel]和[self addSubview:nameLabel]

一般我们向cell中添加子视图,有两种方式

[cell addSubview:]  
[cell.contentView addSubview:]  

    区别在于进行cell编辑时,比如cell内容向左移或者右移时,第一种方式子视图不会移动,第二可以,所以这种情况一般使用第二种方式。

    还有在设置backgroundColor时,使用cell设置时左移或者右移颜色是不会变的,而用cell.contentCell设置时,移动后的空白会显示cell的默认颜色,这种情况视实际情况选择。

    其实这两种方式在大多数情况是一样,不用纠结。

但一般情况下会添加到contentView上,可以这样理解:cell本身是个view,在cell上有一层透明的contentView

 

以上是关于UI基础之frame模型的使用的主要内容,如果未能解决你的问题,请参考以下文章

iOS UI入门

IOS开发之UI布局

RxSwift之UI控件UITextField与UITextView扩展的使用

前端基础之BMO和DOM

MFC之Frame-Splitter模型

Java语言基础之方法的设计