更改子视图控制器的宽度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更改子视图控制器的宽度相关的知识,希望对你有一定的参考价值。

我在swift 3.0中以编程方式将子视图控制器添加到父视图控制器。

但我不希望子视图控制器宽度为全屏,我想自定义子视图控制器的宽度和高度。我试图打开自定义大小子视图控制器,但它无法正常工作。

// Here is my code

let secondViewController = storyboard.instantiateViewController(withIdentifier: storyBoardName)
secondViewController.modalPresentationStyle = UIModalPresentationStyle.custom
secondViewController.view.frame = CGRect(x: 0, y: 0, width: self.view.bounds.width-500, height: self.view.bounds.height)
self.present(secondViewController, animated: false, completion: nil)

有没有办法实现这个目标?

答案

在您的代码中,您没有将第二个ViewController添加为子视图控制器。您正在呈现该视图控制器。它们是有区别的。

您正在尝试使用UIModalPresentationStyle.custom使用自定义样式呈现viewcontroller。但使用这种自定义样式并不是一件容易的事。

来自documentation

创建自定义样式涉及子类化UIPresentationController并使用其方法将任何自定义视图设置为屏幕动画,并设置呈现的视图控制器的大小和位置。演示控制器还处理由于所呈现的视图控制器特征的变化而发生的任何调整

它告诉您需要子类化UIPresentationController并将其方法(使用其他方法)子类化- (CGRect)frameOfPresentedViewInContainerView来设置所呈现的viewcontroller的框架。

this link解释了更多内容。

你可以通过实际添加一个childviewcontroller来实现这一切。步骤将是这样的:

  1. 创建子视图控制器实例。
  2. 将其视图框设置为您想要的任何内容。
  3. 使用addSubview:将其视图作为子视图添加到父视图控制器的视图中
  4. 在父viewcontrller(https://developer.apple.com/documentation/uikit/uiviewcontroller/1621394-addchildviewcontroller)上调用[addChildViewController]
另一答案

这取决于你想要做什么,当我想在另一个UIViewController上显示一些UI我通常使用self.modalPresentationStyle = .overFullScreen的全屏视图控制器。然后我创建了另一个视图,它具有我想要向用户显示的可见大小。这可以让你做任何你想做的事情。

但是如果你想要一个真正的子视图控制器,你需要使用appropriate functions

以上是关于更改子视图控制器的宽度的主要内容,如果未能解决你的问题,请参考以下文章

动画未按照编写代码的顺序运行

如何以编程方式设置控制图像视图宽度的滑块

从另一个片段的其他视图控制片段的视图

在视图控制器生命周期中添加子视图的位置

以编程方式更改子视图控制器

如何从活动中更改片段中视图的可见性