遇到过好屡次使用自定义view,修改frame无效问题, 以前都是放弃xib,直接手写,发现手写简单的还行,复杂的UI就坑逼了。因此仍是须要用到可视化编辑的xib。ui
整理一下,本身备忘也供iOS开发的朋友参考:spa
通常咱们会直接这样写:调试
XPGovRecUnitView *recUnitView = [[[NSBundle mainBundle] loadNibNamed:@"XPGovRecUnitView" owner:self options:nil] firstObject]; recUnitView.tag = 10000+i; recUnitView.delegate = self; recUnitView.frame = CGRectMake(i*89, 0, 89, 139);
这是我一个项目中的代码,可是这样出现了一个问题就是iPhone 6,6Plus以上的正常, iPhone5s屏幕尺寸的就显示不正常了。orm
使用blog
UIView *recUnitView = [[UIView alloc] initWithFrame:CGRectMake(i*89, 0, 89, 139)];开发
调试后发现,使用alloc的方式iPhone5也是正常的。可是这样就要手写代码,往这个UIView 添加控件it
解决方案:io
1. 先把 XPGovRecUnitView.xib这个xib文件的属性设置一下form
在右侧属性栏中,
找到Interface Builder Document , 把Use Auto layout的勾去掉
找到Simulated Metrics , 把Size 设置成None, 没有None就是Freeformclass
2.修改XPGovRecUnitView.m代码
#import "XPGovRecUnitView.h" @interface XPGovRecUnitView () { CGRect tempframe; } @end @implementation XPGovRecUnitView -(id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { NSArray *nibs=[[NSBundle mainBundle]loadNibNamed:@"XPGovRecUnitView" owner:nil options:nil]; self=[nibs objectAtIndex:0]; tempframe = frame; [self initSubViews]; } return self; } -(void)drawRect:(CGRect)rect { self.frame = tempframe; } @end
3.使用时代码
XPGovRecUnitView *recUnitView = [[XPGovRecUnitView alloc] initWithFrame:CGRectMake(i*89, 0, 89, 139)]; recUnitView.tag = 10000+i; recUnitView.delegate = self;
这样就正常了。