如何动态地将 xib 文件视图适合故事板视图?

Posted

技术标签:

【中文标题】如何动态地将 xib 文件视图适合故事板视图?【英文标题】:How can I dynamically fit a xib file view into a storyboard view? 【发布时间】:2020-12-30 13:42:39 【问题描述】:

我已经设置了一个带有按钮的简单布局,当按下该按钮时,会导致情节提要子视图加载 xib 文件并将其视图分配给情节提要子视图。问题是 xib 视图导致情节提要子视图“打破”其原始约束:

这是主故事板(左)和 xib 视图(右):

当我按下主情节提要上的按钮时会发生以下情况。

- (IBAction)btnShowView:(id)sender 
    
    xibViewController *xib_VC = [[xibViewController alloc] initWithNibName:nil bundle:nil];
    xib_VC.modalPresentationStyle = UIModalTransitionStyleCrossDissolve;
    
    //xib_VC.view.frame.size = self.myView.frame.size;
    
    UIView *view = xib_VC.view;
    
    [self.myView addSubview:view];
    

结果如下 - 您可以看到 xib 视图导致主故事板子视图超出其约束。

我猜测动态更改故事板子视图会覆盖其原始视图和约束?在将 xib 视图分配给情节提要子视图之前,我是否必须再次以编程方式添加这些约束?

【问题讨论】:

在故事板界面构建器中使用 ContainerView 谢谢@MuhammadAnum - 这就是我要找的! 【参考方案1】:

根据您的描述,您的意图似乎是将新创建的视图(xib_VC.view)放在 myView 的位置。

您提到的代码是将 xib_VC.view 作为子视图添加到 myview 中,它对其没有任何限制或向view 提供框架。

设置 xib_VC.view.frame.size 将不起作用,这是 xib_VC 中的视图框架。

如果您只需要视图,那么您不必创建视图控制器 xib。只需创建视图 xib。

以下行没有用,因为您没有使用控制器。 xib_VC.modalPresentationStyle = UIModalTransitionStyleCrossDissolve;

【讨论】:

以上是关于如何动态地将 xib 文件视图适合故事板视图?的主要内容,如果未能解决你的问题,请参考以下文章

我有一个使用 XIB 文件的音乐播放器项目,如何将它们转换为故事板/视图控制器?

如何制作没有 xib 或故事板 vc 标识符的视图控制器?

如何通过同一个 ViewController(在故事板上创建)在两个视图(在 xib 上创建)之间切换?

故事板视图 - Xcode 4.2

swift3中的导航问题,带有没有故事板的.xib文件

何时使用 Storyboard 以及何时使用 XIB