在滚动视图中更改 UIView 同时更新滚动视图高度 - Swift 3 / Xcode 8
Change UIView In Scroll View While / Update Scroll View Height - Swift 3 / Xcode 8
我有一个带滚动视图的普通 ViewController。在滚动视图中有几个视图,一个标签和一些按钮。在所有这些下面是一个 UIView。每当按下其中一个按钮时,UIView 就会将多个视图控制器传递给它。每个传递给 UIView 的视图控制器都是 不同的高度 。
一张图说明:
如何调整滚动视图以适应从按下按钮传入的新视图控制器?
更新
这是我的代码:
@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。
每当嵌入式视图控制器更改时,您必须重新计算滚动视图内容大小的高度。
新的高度是图像视图高度 + 按钮容器高度 + 内容视图高度。
显然,您也必须调整容器视图的高度。
我找到解决办法了!
前言:
视图控制器有一个假定的大小。 (您 phone 屏幕的大小)。这就是为什么每当我展示一个视图时,都会向 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 之后。
我有一个带滚动视图的普通 ViewController。在滚动视图中有几个视图,一个标签和一些按钮。在所有这些下面是一个 UIView。每当按下其中一个按钮时,UIView 就会将多个视图控制器传递给它。每个传递给 UIView 的视图控制器都是 不同的高度 。
一张图说明:
如何调整滚动视图以适应从按下按钮传入的新视图控制器?
更新 这是我的代码:
@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。
每当嵌入式视图控制器更改时,您必须重新计算滚动视图内容大小的高度。 新的高度是图像视图高度 + 按钮容器高度 + 内容视图高度。 显然,您也必须调整容器视图的高度。
我找到解决办法了!
前言: 视图控制器有一个假定的大小。 (您 phone 屏幕的大小)。这就是为什么每当我展示一个视图时,都会向 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 之后。