在滚动视图中更改 UIView 而 / 更新滚动视图高度 - Swift 3 / Xcode 8

Posted

技术标签:

【中文标题】在滚动视图中更改 UIView 而 / 更新滚动视图高度 - Swift 3 / Xcode 8【英文标题】:Change UIView In Scroll View While / Update Scroll View Height - Swift 3 / Xcode 8 【发布时间】:2017-07-13 14:30:10 【问题描述】:

我有一个带有滚动视图的普通 ViewController。在滚动视图中有几个视图一个标签和一些按钮。在所有这些之下是一个UIView。每当按下其中一个按钮时,UIView 都会将多个视图控制器传递给它。每个被传递到 UIView 的 View Controller 都是一个不同的高度

一张图说明:

如何调整滚动视图,使其适合按下按钮传入的新视图控制器?

更新 这是我的代码:

 @IBAction func didPressTab(_ sender: UIButton) 


    let previousIndex = selectedIndex
    selectedIndex = sender.tag
    buttons[previousIndex].isSelected = false
    let previousVC = viewControllers[previousIndex]
    previousVC.willMove(toParentViewController: nil)
    previousVC.view.removeFromSuperview()
    previousVC.removeFromParentViewController()
    sender.isSelected = true
    let vc = viewControllers[selectedIndex]
    addChildViewController(vc)


    print("1. NEW VIEW HEIGHT \(vc.view.frame.height)")
    print("1. SCROLL VIEW HEIGHT \(scrollView.contentSize.height)")
    print("1. VIEW CONTROLLER HEIGHT \(self.view.frame.height)")
    print("1. CV HEIGHT \(contentView.frame.height)")
    contentView.layoutIfNeeded()
    height = vc.view.frame.size.height
    contentView.translatesAutoresizingMaskIntoConstraints = true
    contentView.frame.size.height = vc.view.frame.height
    vc.view.frame = contentView.bounds
    scrollView.contentSize.height = staticView.frame.height + height!
    contentView.addSubview(vc.view)



    print("2. NEW VIEW HEIGHT \(vc.view.frame.height)")
    print("2. SCROLL VIEW HEIGHT \(scrollView.contentSize.height)")
    print("2. VIEW CONTROLLER HEIGHT \(self.view.frame.height)")
    print("2. CV HEIGHT \(contentView.frame.height)")

    vc.didMove(toParentViewController: self)





我能够改变高度,但它最终使 UIView 成为普通 VC (667) 的大小,这不是我需要的,因为一些 ViewController 的高度只有 450。

【问题讨论】:

【参考方案1】:

每当嵌入式视图控制器发生变化时,您必须重新计算滚动视图内容大小的高度。 新高度是图像视图高度 + 按钮容器高度 + 内容视图高度。 显然,您也必须调整容器视图的高度。

【讨论】:

我已经发布了我的代码。我已经完成了您提到的操作,并且高度确实发生了变化,只是尺寸不合适,尽管高度不同,但每个视图都是相同的。【参考方案2】:

我找到了解决办法!

前言: 视图控制器具有假定的大小。 (手机屏幕的大小)。这就是为什么每当我向 UIView 添加一个视图时,它总是 667 -(iPhone 6 屏幕尺寸)。所以为了解决这个问题,我这样做了:

代码:

if selectedIndex == 0 

        vc.view.frame.size.height = 480

    

    if selectedIndex == 1 

        vc.view.frame.size.height = 448

    

    if selectedIndex == 2 

        vc.view.frame.size.height = 715

    

    if selectedIndex == 3 

        vc.view.frame.size.height = 480

    

这被放置在 IBAction 中。在 vc 定义之后。

【讨论】:

以上是关于在滚动视图中更改 UIView 而 / 更新滚动视图高度 - Swift 3 / Xcode 8的主要内容,如果未能解决你的问题,请参考以下文章

UIView(放置在滚动视图内)在以编程方式更改高度常量时不显示其子视图

浮动在 UIView 而不是 Paging 上的水平滚动视图

UIScrollView 可滚动区域未随 scrollView 框架约束更新而更新

旋转的 UIView 变得无响应

更改表格宽度时,Swift Tableview 向上移动

更改视图控制器时保持滚动位置