gpt4 book ai didi

ios - 不正确的 Popover 大小 - 在 Popover 中的 Navigation Controller 下显示 UITableViews 时

转载 作者:行者123 更新时间:2023-11-28 20:26:09 31 4
gpt4 key购买 nike

我正在编写一个 iPad 应用程序,它具有在 UIPopoverController 内的导航 Controller 下显示的 UITableViews。

当我在我的应用程序的主视图 Controller 中选择一个按钮时,会显示弹出窗口。弹出框打开显示第一个 TableViewController,它有两行 (UITableViewCells) - 第一行是“搜索”,第二行是“高级设置”。在初始显示时,弹出窗口的大小刚好足以显示两行。

我已经对第一个 TableViewController 的 didSelectRowAtIndexPath 进行了编码,这样当我选择“搜索”时,它会将第二个 TableViewController 推送到 NavigationViewController 上。下一个 View Controller 允许用户执行搜索,然后搜索结果填充到其 TableView 中。)这个(搜索结果) TableView Controller 的大小足以容纳搜索返回的所有行。因此,在显示搜索 TableView Controller 时,搜索弹出框会变长。

当我取消搜索(或点击导航栏中的后退按钮)时,弹出窗口返回显示第一个 TableView Controller (只有两行的那个)。然而,第一个 TableView Controller 现在有更长的尺寸。换句话说,弹出窗口不会将自身调整回两行表,而是保持第二个(搜索结果) TableView Controller 的大小(因此它现在有两行“搜索”和“高级设置”加上一个数字空行)

我的问题是:如何让此实现中层次结构中的每个 TableView Controller (即 TableView Controller 显示在导航 Controller 下的弹出窗口中的位置)单独调整大小并在用户时返回其原始大小前后导航。可能有一个简单的解决方案,但它逃脱了我!如果有人能指出我的解决方案,我将不胜感激。

最佳答案

由于上述解决方案不再有效,这里有一个更新的 (Swift) 替代方案。

您可以将 popovercontroller 传递给您的 destinationViewControllers。然后在 viewWillAppear() 中调用 preferredContentSizeDidChangeForChildContentContainer,弹出窗口将自动调整大小。

override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if let ppc = popoverController {
ppc.preferredContentSizeDidChangeForChildContentContainer(self)
}
}

如果它不起作用,请确保您正确实现了 preferredContentSize。例如,使用单个部分计算 tableViewController 的大小:

override var preferredContentSize: CGSize {
get {
let sectionFrame = self.tableView.rectForSection(0)
let titleOnTop = self.navigationController!.navigationBar.frame.height
let height = sectionFrame.height + titleOnTop
return CGSize(width: super.preferredContentSize.width, height: height)
}
set { super.preferredContentSize = newValue }
}

关于ios - 不正确的 Popover 大小 - 在 Popover 中的 Navigation Controller 下显示 UITableViews 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13905858/

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