更改子视图控制器的宽度

时间:2017-12-21 11:37:52

标签: ios swift uiviewcontroller

我在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)

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

2 个答案:

答案 0 :(得分:0)

在您的代码中,您没有将secondViewController添加为子视图控制器。您正在呈现该视图控制器。有区别。

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

来自documentation

  

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

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

this link中解释了更多内容。

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

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

答案 1 :(得分:0)

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

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