在滚动视图中更改 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 上的水平滚动视图