美文网首页
更改 Xib 中控件Frame

更改 Xib 中控件Frame

作者: wpf_register | 来源:发表于2019-06-03 17:53 被阅读0次

    参考文档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);
    }
    

    相关文章

      网友评论

          本文标题:更改 Xib 中控件Frame

          本文链接:https://www.haomeiwen.com/subject/nwhhxctx.html