控件通过xib,storyboard创建,初始化设置一定会调用initWithCoder

awakeFromNib 加载完毕的时候肯定会调用

layoutSubviews 布局子控件 位置和尺寸

利用代码证实

先创建wlisView.xib 拖两个控件 imageView 和 Label

创建一个类 wlisView.h  并且让wlisView.xib 自定义类 class  wlisView

在wlisView.h 声明一个类方法

+(instancetype)wlisViewWith;

在wlisView.m文件中实现改方法   并且连线 xib中的两个子控件

#import "wlisView.h"

@interface wlisView ()
/**
连线xib中UIImageView
*/
@property (weak, nonatomic) IBOutlet UIImageView *imgView;
/**
连线xib中UILabel
*/
@property (weak, nonatomic) IBOutlet UILabel *lab; @end
@implementation wlisView /**
重写initWithCoder方法
*/
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
if (self=[super initWithCoder:aDecoder]) {
/**
打印
*/
NSLog(@"%s",__func__);
NSLog(@"self.frame-%@",NSStringFromCGRect(self.frame));
NSLog(@"self.imgView-%@",NSStringFromCGRect(self.imgView.frame));
NSLog(@"self.lab-%@",NSStringFromCGRect(self.lab.frame));
}
return self; }
-(void)layoutSubviews{
[super layoutSubviews];
/**
打印
*/
NSLog(@"%s",__func__);
NSLog(@"self.frame-%@",NSStringFromCGRect(self.frame));
NSLog(@"self.imgView-%@",NSStringFromCGRect(self.imgView.frame));
NSLog(@"self.lab-%@",NSStringFromCGRect(self.lab.frame));
}
-(void)awakeFromNib{
[super awakeFromNib];
/**
打印
*/
NSLog(@"%s",__func__);
NSLog(@"self.frame-%@",NSStringFromCGRect(self.frame));
NSLog(@"self.imgView-%@",NSStringFromCGRect(self.imgView.frame));
NSLog(@"self.lab-%@",NSStringFromCGRect(self.lab.frame));
} /**
创建
*/
+(instancetype)wlisViewWith{
//读取跟类文件中相同名称的xibNSStringFromClass(self) 并且创建
return [[[NSBundle mainBundle]loadNibNamed:NSStringFromClass(self) owner:nil options:nil]lastObject]; }
@end

wlisView.m

在ViewController创建

#import "ViewController.h"
#import "wlisView.h"
@interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
wlisView * wl=[wlisView wlisViewWith];
[self.view addSubview:wl];
}
@end

ViewController

打印输出结果:

个人认为记住一个方法就好了,那就是layoutSubviews 这个方法

因为这个方法是苹果为我们准备更改控件的 为什么不用

xcode initWithCoder\awakeFromNib\layoutSubviews的更多相关文章

  1. initWithNibName&initWithCoder &awakeFromNib&UIView常见属性方法

    第一.initWithNibName这个方法是在controller的类在IB中创建,但是通过Xcode实例化controller的时候用的. 第 二.initWithCoder 是一个类在IB中创建 ...

  2. init,initialize,initWithFrame,initWithCoder,awakeFromNib等区别

    1.init 与initialize 对于iOS程序,创建几个类对象,就会调用几次init.下面分别重写 举例如下: 创建一个Person类,分别重写initialize和init方法 #import ...

  3. iOS initWithFrame、initWithCoder、awakeFromNib的区别解析

    当我们需要自定义一个View控件时,会有 initWithFrame.initWithCoder.awakeFromNib 这三个系统方法,关于这三个方法何时调用,如何调用,有时候可能很多人会弄混淆. ...

  4. iOS中View生命周期与布局

    生命周期 说到view的生命周期一般都是指视图控制器的view生命周期. view的创建:loadView 视图控制器(UIViewController)及其子类,无论是手写代码还是storyboar ...

  5. iOS viewController 和 view 的创建消失生命周期总结

    控制器创建的生命周期 1. 如果从stroryBoard 中产生一个controller,那么会先调用initWithCoder:, awakeFromNib, loadView,viewDidLoa ...

  6. UIScrollView入门与框架设计

    一.概述 1.UIScrollView的contentSize, contentOffSet, contentInsets的作用和使用. 2.UIScrollView的一整个滚动过程的生命周期(开始滚 ...

  7. iOS:viewController 和 view 的生命周期、不错的代码设计风格

    一.介绍: viwe和viewController的生命周期是最基本的知识,如果很好地理解它们的方法调用的执行顺序,就能很好地设计代码的风格.这篇博客转载自:http://www.cnblogs.co ...

  8. UIViewController生命周期-完整版

    一.UIViewController 的生命周期 下面带 (NSObject)的方法是NSObject提供的方法.其他的都是UIViewController 提供的方法. load   (NSObje ...

  9. VIEWCONTROLLER的启动流程

    转载自:http://sunnyyoung.net/post/ios/2015-04-22-viewcontrollerde-qi-dong-liu-cheng-yu-jie-xi VIEWCONTR ...

随机推荐

  1. Java判断字符串是否为空的三种方法

    方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低.1: if(s == null || s.equals("")); 方法二: 比较字符串长度, 效率高, 是我知道的最 ...

  2. MyBitis(iBitis)系列随笔之五:多表(一对多关联查询)

    MyBitis(iBitis)系列随笔之一:MyBitis入门实例 MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM) MyBitis(iBitis ...

  3. Android 开发ListView适配器优化

    我们都知道Android中Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View.想过没有? 在我们的列 ...

  4. HDU 4308 BFS Saving Princess claire_

    原题直通车:HDU 4308 Saving Princess claire_ 分析: 两次BFS分别找出‘Y’.‘C’到达最近的‘P’的最小消耗.再算出‘Y’到‘C’的最小消耗,比较出最小值 代码: ...

  5. Android在应用中依据包名启动另外一个APP

    以下为TestIntentData工程 MainActivity如下: package cn.testintentdata; import java.util.List; import android ...

  6. stl之map 排序

    排序问题,STL中默认是采用小于号来排序的,因为设置int等类型做key,它本身支持小于号运算,在一些特殊情况,比如关键字是一个结构体,涉及到排序就会出现问题,因为它没有小于号操作,insert等函数 ...

  7. [Java]HashMap的两种排序方式

    先将 Map 中的 key 和 value 全部取出来封装成 JavaBea 数组,再将这个数组排序,排序完成后,重新写回 Map 中,写回时采用 LinkedHashMap 可以保证迭代的顺序. 下 ...

  8. CocoaPods 安装和使用

    CocoaPods的安装 >1. 打开终端, 输入 gem sources -remove https://rubygems.org/ >2. 再输入 gem sources -a htt ...

  9. 微型 ORM 的第二篇 DapperLambda性能测试[Dapper比较篇]

    由于这周比较忙,所以本来想做的性能测试,一直没时间,想想还是今天给补上吧 由于很多人都担心性能问题,封装之后跟Dapper的性能差距是多少,今天我给出我的测试方法,仅供参考. 创建IDbConnect ...

  10. XStream和Json

    XStream的作用 XStream可以把JavaBean对象转换成XML! 通常服务器向客户端响应的数据都是来自数据库的一组对象,而我们不能直接把对象响应给响应端,所以我们需要把对象转换成XML再响 ...