gpt4 book ai didi

ios - Swift:使用 prepareForSegue 将 UIView 容器的高度设置为嵌入式 UITableView 的高度

转载 作者:可可西里 更新时间:2023-11-01 02:18:12 27 4
gpt4 key购买 nike

我有一个 UITableViewController 嵌入在 UIView 容器中,它位于 UIViewController UIScrollView 的底部。这是 Storyboard中当前配置的屏幕截图。

screenshot

UITableView 将包含对所选帖子的回复。因为 UITableView 中的高度和响应数量是可变的,所以我希望 UIView 容器的高度根据表格的高度而变化。当前(不良)行为是 UIView 容器保持恒定高度,并在 UITableView 高度大于 UIView 容器高度时滚动。

最可行的方法似乎是让 UITableViewController 使用 prepareForSegue 将表格的高度传递给 UIViewController,然后设置UIView 的高度为传递的值。但是,在运行 prepareForSegue 之前,我似乎无法使用表格的高度设置值。

什么不起作用

  1. UIViewUITableViewController 之间的嵌入转场标识符设置为“embedSegue”
  2. 在嵌入式 UITableViewController 类的顶部,创建一个变量来保存表格的高度:

    var tableHeight: CGFloat!
  3. 仍然在嵌入式 UITableViewController 中,像这样覆盖 viewDidLoad,将 passedHeight 打印到控制台以供检查:

    override func viewDidLoad() {
    super.viewDidLoad()

    self.tableView.estimatedRowHeight = 68.0
    self.tableView.rowHeight = UITableViewAutomaticDimension

    self.tableHeight = self.tableView.contentSize.height
    print(tableHeight)
    }
  4. 在包含 UIView 容器的 UIViewController 类中,创建一个变量来保存从 UITableViewController 传递的值:

    var viewHeight: CGFloat!
  5. 还是在 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)
    }
    }
    }
  6. 当我运行该应用程序时,viewHeight 首先打印为 Nil,然后打印 tableHeight,这意味着 prepareForSegue 已在设置 tableHeight 之前运行。

除了 prepareForSegue 之外,我还尝试了其他方法,包括在 viewDidLayoutSubviews() 中调用 UIView 容器上的各种函数,例如:

  • .sizeThatFits()
  • .needsUpdateConstraints()
  • .layoutIfNeeded()

但是,UIView 容器的高度与 Storyboard中设置的高度相同。

作为结语,这是我的第一篇 StackOverflow 帖子,我很高兴能加入社区。如果我能澄清我的问题,请告诉我。感谢您抽出宝贵时间。

最佳答案

我没有将 UIViewController 与包含三个 UIViewsUIScrollView 一起使用,而是创建了一个包含三个自定义的 UITableView细胞。每个单元格都有自己的自定义 UITableViewCell 类以提高灵 active 。

这意味着我无法使用约束来动态更改每个部分的高度。我希望帖子标题和帖子文本以全屏图像为中心。为此,我添加了以下逻辑:

    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
}
}

引用资料

How to embed a UITableView in a UIScrollview
对激发这个想法的类似问题的简短回答

UITableview with more than One Custom Cells with Swift
详解如何用3个自定义UITableViewCells创建UITableView

关于ios - Swift:使用 prepareForSegue 将 UIView 容器的高度设置为嵌入式 UITableView 的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34562655/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com