更改 Xib 中控件Frame
2019-06-03 本文已影响0人
wpf_register
参考文档1
参考文档2
在 VC中加载Xib 自定义的myView 并修改 Frame,打印结果显示确实修改成功,但实际运行无变化 。
-(void)viewDidLoad {
[super viewDidLoad];
NSLog(@"之前==%@",NSStringFromCGRect(self.myView.frame));
CGRect rect = self.myView.frame;
tempFrame.size.height = 100;
self.myView.frame = rect;
NSLog(@"之后==%@",NSStringFromCGRect(self.myView.frame));
}
问题原因:
从nib中通过拖线连接的属性,在viewDidLoad中会根据初始的frame再计算一次frame。过程中虽然更改了frame,但是auto layout之后又恢复了之前的frame,所以模拟器显示没有变化。
因为auto layout是在viewDidLoad方法之后计算的,所以在viewDidLoad方法中打印出的值肯定改变了,可后面又被改变回原来的值。
有几种方式可以尝试:
-
在viewDidLayoutSubviews方法中改变frame,这个方法通常是view显示之前最后执行的,所以这里更改没问题。
-
去掉VC中的auto layout,就可以在viewDidLoad方法中更改了
-
在xib文件对应的 .m 文件中实现layoutSubviews或者drawRect:(CGRect)rect方法即可:
- (void)layoutSubviews{
[super layoutSubviews];
self.frame = CGRectMake(0, 0, kScreenWidth, 390);
}
- (void)drawRect:(CGRect)rect{
[super drawRect:rect];
self.frame = CGRectMake(0, 0, kScreenWidth, 390);
}