我在UITableViewController
容器中嵌入了UIView
,该容器位于UIScrollView
中UIViewController
的底部。以下是故事板中当前配置的屏幕截图。
UITableView
将包含对所选帖子的回复。因为UITableView
中的响应的高度和数量是可变的,所以我希望UIView
容器的高度根据表的高度而变化。当前(不合需要的)行为是UIView
容器保持恒定高度,并在UITableView
高度大于UIView
容器高度时滚动。
最可行的方法似乎是让UITableViewController
使用UIViewController
将表格的高度传递给prepareForSegue
,然后将UIView
的高度设置为那传递了价值。但是,在makeForSegue运行之前,我似乎无法使用表的高度设置值。
什么不工作
UIView
和UITableViewController
之间的嵌入segue的标识符设置为“embedSegue”在嵌入式UITableViewController
类的顶部,创建一个变量来保存表的高度:
var tableHeight: CGFloat!
仍然在嵌入式UITableViewController
中,像这样覆盖viewDidLoad
,将passHeight打印到控制台进行检查:
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.estimatedRowHeight = 68.0
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableHeight = self.tableView.contentSize.height
print(tableHeight)
}
在包含UIViewController
容器的UIView
类中,创建一个变量来保存从UITableViewController
传递的值:
var viewHeight: CGFloat!
仍然在UIViewController
中,像这样覆盖prepareForSegue
,将viewHeight设置为传递的tableHeight值,并将viewHeight打印到控制台进行检查:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "embedSegue" {
let responseTableView = segue.destinationViewController as! ResponseViewController
self.viewHeight = responseTableView.tableHeight
if viewHeight == nil {
print("Nil")
} else {
print(viewHeight)
}
}
}
当我运行应用程序时,viewHeight首先打印为Nil,然后打印tableHeight,这意味着在设置tableHeight之前已运行prepareForSegue
。
除了prepareForSegue
之外,我还尝试了其他方法,包括在viewDidLayoutSubviews()中的UIView
容器上调用各种函数,如:
但是,UIView
容器的高度与故事板中设置的高度相同。
作为结语,这是我的第一篇StackOverflow帖子,我很高兴能够加入社区。如果我能澄清我的问题,请告诉我。感谢您抽出宝贵时间。
答案 0 :(得分:1)
我创建了一个包含三个自定义单元格的UIViewController
,而不是使用包含三个UIScrollView
的{{1}}的{{1}}。每个单元格都有自己的自定义UIViews
类,以提高灵活性。
这意味着我失去了使用约束来动态改变每个部分的高度的能力。我希望Post Title和Post Text以全屏图像为中心。为实现这一目标,我添加了以下逻辑:
UITableView
How to embed a UITableView in a UIScrollview
对类似问题的简短回答引发了这个想法
UITableview with more than One Custom Cells with Swift
有关如何使用3个自定义UITableViewCell
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if indexPath.row == 0 {
//Fullscreen image cell - the "20" is for the status bar
return tableView.frame.size.height - self.navigationController!.navigationBar.frame.size.height - 20
} else {
//Just use the current rowHeight
return self.tableView.rowHeight
}
}
的详细说明