iOS Auto Layout 的布局时机
  这段代码无效
[self setupScrollView];
self.thirdChildVC = [[CreateYugangTab1ViewController alloc] init];
[self.thirdChildVC.view setFrame:self.scrollView.bounds];
[self.scrollView addSubview:self.thirdChildVC.view];
原因:
1. Auto Layout 的布局时机
在 iOS 中,视图的布局过程分为以下几个阶段:
(1) viewDidLoad
		视图控制器的视图已经加载到内存中,但此时视图的布局尚未完成。
		这意味着视图的 frame 和 bounds 可能还未确定(尤其是当使用 Auto Layout 时)。
		在这个阶段,直接设置子视图的 frame 或访问父视图的 bounds 可能会导致不准确的结果。
(2) viewWillAppear
		视图即将显示,但此时布局仍然可能未完全确定。
		系统可能会在此阶段调整约束或重新计算布局。
(3) viewWillLayoutSubviews 和 viewDidLayoutSubviews
		关键阶段:这是系统实际执行布局的地方。
		在此阶段,Auto Layout 根据约束计算出视图的最终 frame 和 bounds。
		如果需要动态调整布局(例如根据父视图的尺寸设置子视图的尺寸),应该在这个阶段进行操作。
(4) layoutSubviews
		每个视图都会调用此方法来更新其子视图的布局。
		如果您自定义了一个视图类,可以在 layoutSubviews 中手动调整子视图的布局。
正确做法:
self.thirdChildVC = [[CreateYugangTab1ViewController alloc] init];
    [self addChildViewController:self.thirdChildVC];
    [self.scrollView addSubview:self.thirdChildVC.view];
    [self.thirdChildVC didMoveToParentViewController:self];
    self.thirdChildVC.view.translatesAutoresizingMaskIntoConstraints = NO;
//    self.thirdChildVC.view.backgroundColor = [UIColor redColor];
    // Add constraints for the child view
    [NSLayoutConstraint activateConstraints:@[
        [self.thirdChildVC.view.leadingAnchor constraintEqualToAnchor:self.scrollView.leadingAnchor],
        [self.thirdChildVC.view.trailingAnchor constraintEqualToAnchor:self.scrollView.trailingAnchor],
        [self.thirdChildVC.view.topAnchor constraintEqualToAnchor:self.scrollView.topAnchor],
//        [self.thirdChildVC.view.bottomAnchor constraintEqualToAnchor:self.scrollView.bottomAnchor],
        [self.thirdChildVC.view.widthAnchor constraintEqualToAnchor:self.scrollView.widthAnchor], // 确保宽度一致
    ]];
    [self.thirdChildVC.view.heightAnchor constraintEqualToAnchor:self.scrollView.heightAnchor].active = YES;
标签:ios
加入收藏
