xcode initWithCoder\awakeFromNib\layoutSubviews
控件通过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的更多相关文章
- initWithNibName&initWithCoder &awakeFromNib&UIView常见属性方法
第一.initWithNibName这个方法是在controller的类在IB中创建,但是通过Xcode实例化controller的时候用的. 第 二.initWithCoder 是一个类在IB中创建 ...
- init,initialize,initWithFrame,initWithCoder,awakeFromNib等区别
1.init 与initialize 对于iOS程序,创建几个类对象,就会调用几次init.下面分别重写 举例如下: 创建一个Person类,分别重写initialize和init方法 #import ...
- iOS initWithFrame、initWithCoder、awakeFromNib的区别解析
当我们需要自定义一个View控件时,会有 initWithFrame.initWithCoder.awakeFromNib 这三个系统方法,关于这三个方法何时调用,如何调用,有时候可能很多人会弄混淆. ...
- iOS中View生命周期与布局
生命周期 说到view的生命周期一般都是指视图控制器的view生命周期. view的创建:loadView 视图控制器(UIViewController)及其子类,无论是手写代码还是storyboar ...
- iOS viewController 和 view 的创建消失生命周期总结
控制器创建的生命周期 1. 如果从stroryBoard 中产生一个controller,那么会先调用initWithCoder:, awakeFromNib, loadView,viewDidLoa ...
- UIScrollView入门与框架设计
一.概述 1.UIScrollView的contentSize, contentOffSet, contentInsets的作用和使用. 2.UIScrollView的一整个滚动过程的生命周期(开始滚 ...
- iOS:viewController 和 view 的生命周期、不错的代码设计风格
一.介绍: viwe和viewController的生命周期是最基本的知识,如果很好地理解它们的方法调用的执行顺序,就能很好地设计代码的风格.这篇博客转载自:http://www.cnblogs.co ...
- UIViewController生命周期-完整版
一.UIViewController 的生命周期 下面带 (NSObject)的方法是NSObject提供的方法.其他的都是UIViewController 提供的方法. load (NSObje ...
- VIEWCONTROLLER的启动流程
转载自:http://sunnyyoung.net/post/ios/2015-04-22-viewcontrollerde-qi-dong-liu-cheng-yu-jie-xi VIEWCONTR ...
随机推荐
- python执行shell命令
1 os.system 可以返回运行shell命令状态,同时会在终端输出运行结果 例如 ipython中运行如下命令,返回运行状态status os.system('cat /etc/passwdqc ...
- Python进阶--GUI编程
一.图形用户图面(GUI编程) 1. wxpython下载和安装: 下载url: http://wxpython.org/download.php 2.创建示例GUI应用程序 : ①开始需要导入wx ...
- 如何使Label带有链接??此法感觉有点取巧!!!
关键代码 /**************************************************************第一行***************************** ...
- 【我所認知的BIOS】—>ADU.exe
[我所認知的BIOS]—>ADU.exe By LightSeed 2009-5-12 1.概要 在學習的過程中,肯定會要用不少的工具,作為底層的engineer那麼用的工具大多是DOS下.在D ...
- mysql的查询缓存
查询是数据库技术中最常用的操作.查询操作的过程比较简单,首先从客户端发出查询的SQL语句,数据库服务端在接收到由客户端发来的 SQL语句后, 执行这条SQL语句,然后将查询到的结果返回给客户端 ...
- SAN实现
Linux 上主要有三个 iSCSI Target(基于internet scsi协议的target) 实现: Linux SCSI Target – STGT / tgt Linux-IO Targ ...
- CouchDB简单应用
CouchDB是众多称作NoSQL解决方案中的一员.与众不同的是,CouchDB是一个面向文档的数据库,在它里面所有文档域(Field)都是以键值对的形式存储的.域(Field)可以是一个简单的键值对 ...
- JAVA里的String、Timestamp、Date相互转换
Timestamp转化为String: SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定义 ...
- Problem B: 最少步数
DescriptionA friend of you is doing research on theTraveling Knight Problem (TKP) where you are to f ...
- hadoop笔记之hdfs
1.HDFS设计基础与目标 1.HDFS设计基础与目标 (1)硬件错误是常态,因此需要冗余. (2)流式数据访问.即数据批量读取而非随机读写,Hadoop擅长做的是数据分析而不是事务处理. (3)大规 ...