我有一个充当容器视图控制器的UIViewController。它有一个与屏幕宽度相同的UIScrollView,但它的高度小于屏幕的高度。
UIScrollView包含另外两个UIViewControllers的视图,这些视图可以水平滚动。
我将contentSize设置为:
scrollView.contentSize.width = self.view.bounds.width * 2
这样可以让我水平滚动浏览我的UIViewController视图。
以下是我如何将UIViewController视图添加到我的scrollView:
private func addPanel(viewController: UIViewController, panel: Panel) {
let xOffset: CGFloat!
switch panel {
case .left:
xOffset = 0.0
case .right:
xOffset = self.view.bounds.width
}
let panelView = UIView(frame: CGRect(x: xOffset, y: 0, width: self.view.bounds.width, height: self.scrollView.bounds.height))
scrollView.addSubview(panelView)
let panelViewController: UIViewController! = viewController
var viewBounds = view.bounds
viewBounds.height = panelView.bounds.height
panelViewController.view.frame = view.bounds
panelView.addSubview(panelViewController.view)
addChildViewController(panelViewController)
panelViewController.didMove(toParentViewController: self)
}
出于某种原因,UIViewController视图不会调整大小以适应UIScrollView的高度。
我应该以约束为基础吗?我该怎么做我已经挣扎了好几天而且不知所措。
基本上,UIViewController视图就像全屏视图偏移一样,因此您无法看到视图的底部,因为屏幕底部会将它们关闭。
答案 0 :(得分:0)
我只是在不知道所有代码的情况下进行猜测,但有一个原因可能是在滚动视图布局之前添加了子视图控制器。
添加并设置子视图大小后,scrollview会将其大小调整为手机大小,但您永远不会更新子视图。
我的建议是将子视图控制器添加到滚动视图,但将框架设置代码移动到布局方法中,在该方法中您知道视图具有正确(可见)的框架/边界。
鉴于您在视图控制器中编写此内容,一种方法可能是-viewDidLayoutSubviews
希望这是有道理的,如果没有,请随时提出更多问题。