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 ...
随机推荐
- ios字符串计算高度总结
1.用xib的话,设置约束的时候 不设置lable的高度即可,高度返回的就是最优高度. 2.用lable代码计算高度 CGFloat getHeightForLableString(NSString ...
- C++设计模式之工厂模式
//产品父类声明#pragma once #include "iostream" using namespace std; class Product { public: virt ...
- ArcEngine做栅格数据拉伸
//获得已打开的栅格数据 IRasterLayer rasterLayer = new RasterLayerClass(); rasterLayer = (IRasterLayer)axMapCon ...
- Oracle EBS-SQL (SYS-20):OPM接口处理.sql
/* 未加工的材料交易(必须解决) UNcosted Transactions (must resolve) 无成本的交易(必须解决) Pending WIP costing transactions ...
- Delphi中的Rtti函数
TTypeKind,类型类别,tkclass,tkinteger,tkstring等.类,属性都是一种类型. ttypedata,是一个record包括ttypekind.是一个类的描述.TTypeK ...
- android权限列表
原文:[转]android权限列表 访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略 ...
- iOS 视图跳转
//跳转 - ( void)present:( id )sender { NSLog ( @"the button,is clicked …" ); // 创建准备跳转的 UIVi ...
- JAVA Layout
/** * baidu :组件不会直接放到框架上,而是放在若干个面板上,这些面板再放到窗格上? * 实际上在JFrame上可直接添加Jbutton * * BorderLayout Flow ...
- Pat(Advanced Level)Practice--1043(Is It a Binary Search Tree)
Pat1043代码 题目描写叙述: A Binary Search Tree (BST) is recursively defined as a binary tree which has the f ...
- li span兼容性问题
li与span的搭配使用所产的浏览器兼容性问题 1.ls两位,设定了width还是没用.2.总结了一下就是,里面的标签漂浮以后,就不能撑起外层的容器了. 3.li要设至少一个宽度或高度,还要加上ove ...