美文网首页iOS 进阶
使用XIB文件布局获取并更改某控件frame的问题

使用XIB文件布局获取并更改某控件frame的问题

作者: yangfei02821 | 来源:发表于2019-08-26 14:39 被阅读0次

问题:
有时候我们会遇到这样的问题:假如在(xib或者sb就统称nib)nib中有一个view(默认大小是100*100),我在控制器中的viewDidLoad方法中更改了frame却发现打印出的值确实是改了,但是实际上显示的结果却没有变化,
罪魁祸首就在在于这里:


image.png

如果我们是从nib中通过拖线连接的属性,那么在viewDidLoad之后会根据初始的frame再计算一次frame,过程中,你虽然更改了frame,但是auto layout之后又恢复了之前的frame,所以模拟器显示没有变化.
但为什么打印值变了呢?很简单,因为auto layout是在viewDidLoad方法之后计算的,所以在viewDidLoad方法中打印出的值肯定改变了,可后面又被改变回原来的值
解决:
由于开发中进场使用xib,或storyBoard来布局,有的时候需要获取某一控件的frame大小,或者在load完xib文件以后修改某控件的frame。这时需要用到的主要方法为 ;

第一种

//不添加这两个方法获得的尺寸会是xib里面未完成autolayout适配的尺寸,storyBoard同理
  [view setNeedsLayout];
  [view layoutIfNeeded];

第二种

如果需要在加载xib之后修改frame或者获取frame需要在

  • (void)viewDidAppear:(BOOL)animated;中修改或者获取
    或者在viewDidLayoutSubviews方法中改变frame,这个方法通常是view显示之前最后执行的,所以这里更改没问题

第三种
去掉auto layout,就可以在viewDidLoad方法中更改了

相关文章

网友评论

    本文标题:使用XIB文件布局获取并更改某控件frame的问题

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