转自:http://www.07net01.com/program/2016/01/1210764.html
[摘要:为了省时光,自界说的View,给它弄一个xib,内里的子View,间接正在xib里划推几个就好了,切切出念到,整出去的自界说View,不管我 以何种姿态的设置frame,减载其余中央,它的frame皆是(0,0]
为了省时间,自定义的View,给它搞一个xib,里面的子View,直接在xib里划拉几个就行了,万万没想到,整出来的自定义View,无论我
以何种姿势的设置frame,加载别的地方,它的frame都是(0,0,600,600).网上搜了很久,也没搜到类似问题,最后看到了一篇文章<XIB,AutoLayout使用心得>,
上面有段说的是
对于通过loadNamedXib加载到内存中的View,必须手动指定其frame中的width和height,然后再通过addSubView的方式添加到现有的View树中,使用Xib表示的View在布局时,是以600*600的默认宽高进行的。文章链接:http://blog.youkuaiyun.com/a345017062/article/details/45916833
瞬间顿悟,原来我loadNamedXib的时候没有给frame赋值啊
上代码
#import <UIKit/UIKit.h>
@interface XSDCalculationFeeView : UIView
@end
#import "XSDCalculationFeeView.h"
@implementation XSDCalculationFeeView
// 对于通过loadNamedXib加载到内存中的View,必须必须给View的frame赋值,然后再通过addSubView的方式添加到现有的View树中. 因为使用Xib表示的View在布局时,是以600*600的默认宽高进行的。
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self = [[NSBundle mainBundle] loadNibNamed:@"XSDCalculationFeeView" owner:self options:nil][0];
self.frame = frame;// 必须给View的frame赋值
}
return self;
}
@end
注:self.frame = frame;//这句代码必须有, 必须给View的frame赋值 这个是必须要的,切记!否则View的frame将始终是(0,0,600,600)!
ps:2015 12.25 修改: 以上加载带XIB的View,在iOS7上会crash,以及在viewDidLoad加载时,会导致不能屏幕适配,只有在点击按钮,创建新的View时候,才可用;具体原因,正在研究中...