You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将视图控制器加载到容器视图?代码无报错但未显示内容

问题分析与解决方法

嘿,我一眼就发现问题所在啦!你的代码里遗漏了将子控制器的视图添加到container view的子视图层级这关键一步——你只完成了控制器层面的关联,却没把视图真正放到容器里,所以界面自然看不到内容。

完整的正确步骤应该是这样的:

  • 实例化子控制器
  • 将子控制器添加为当前控制器的子控制器(AddChildViewController)
  • 将子控制器的视图添加到container view的子视图中(你漏掉的就是这一步!)
  • 设置子视图的布局(Frame或AutoLayout约束)
  • 调用DidMoveToParentViewController完成关联

修正后的代码:

public override void ViewDidLoad() 
{
    base.ViewDidLoad();
    
    var view2 = Storyboard.InstantiateViewController("View2");
    this.AddChildViewController(view2);
    // 新增:把子视图添加到container的子视图里
    container.AddSubview(view2.View);
    view2.View.Frame = container.Frame;
    // 推荐补充:如果用AutoLayout的话,关闭自动转译mask,添加约束适配所有屏幕
    view2.View.TranslatesAutoresizingMaskIntoConstraints = false;
    NSLayoutConstraint.ActivateConstraints(new[]
    {
        view2.View.TopAnchor.ConstraintEqualTo(container.TopAnchor),
        view2.View.LeadingAnchor.ConstraintEqualTo(container.LeadingAnchor),
        view2.View.TrailingAnchor.ConstraintEqualTo(container.TrailingAnchor),
        view2.View.BottomAnchor.ConstraintEqualTo(container.BottomAnchor)
    });
    view2.DidMoveToParentViewController(this);
}

额外说明:

直接设置Frame在屏幕旋转或者不同尺寸设备上容易出现布局错乱,所以更推荐用AutoLayout约束来让子视图完全填充container view,上面的代码里已经补充了这部分内容,你可以根据需求选择使用。

内容的提问来源于stack exchange,提问作者Entretoize

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:40:26