更改 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方法中打印出的值肯定改变了,可后面又被改变回原来的值。

有几种方式可以尝试:

  1. 在viewDidLayoutSubviews方法中改变frame,这个方法通常是view显示之前最后执行的,所以这里更改没问题。

  2. 去掉VC中的auto layout,就可以在viewDidLoad方法中更改了


  3. 在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);
}
上一篇 下一篇

猜你喜欢

热点阅读