AutoLayout, Xib, UIView

  1. 不要在 - (void)viewDidLoad; 方法里获取Xib里面的frame值:
    举例:在一个XIb中含约束的View中, 代码添加一个自定义动态View;
    (1) XIb约束如下:


    Xib中约束

    (2) 添加子View代码

CGRect backgroudViewFrame = CGRectMake(0, 0, CGRectGetWidth(self.backgroudView.bounds), CGRectGetHeight(self.backgroudView.bounds));
    UIView *frontView = [[UIView alloc] initWithFrame:backgroudViewFrame];
    frontView.backgroundColor = [UIColor yellowColor];
    [self.backgroudView addSubview:frontView];
    NSLog(@"%s,frame = %@",__func__,self.backgroudView);

(3)在 -(void)viewDidLoad 和 - (void)viewDidAppear:(BOOL)animated中的输出分别是

-[ViewController viewDidLoad],frame = <UIView: 0x78792640; frame = (36 70; 248 448); autoresize = RM+BM; layer = <CALayer: 0x78792810>>
-[ViewController viewDidAppear:],frame = <UIView: 0x78792640; frame = (36 70; 248 360); autoresize = RM+BM; layer = <CALayer: 0x78792810>>

总结:可以看到在viewDidLoad 和 viewDidAppera中获取的frame不一致。 在动态获取frame中,应该在viewDidApear中获取.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容