gpt4 book ai didi

ios - 在 UISplitViewController 的子类中更新 DetailViewController 的框架

转载 作者:搜寻专家 更新时间:2023-11-01 07:22:23 24 4
gpt4 key购买 nike

我希望在 splitViewController?.displayMode == .PrimaryOverlay 时更改 DetailViewController 的框架,这样 DetailViewController View 永远不会被遮挡通过 MasterViewController。当从 splitViewController?.displayMode == .PrimaryHidden 导航到 splitViewController?.displayMode == .PrimaryOverlay 时,我已经设法在 iPad 纵向方向上使用自定义 UISplitViewController使用重写的 viewDidLayoutSubviews 方法,如 jrc 在此处的回答中所述:Change the width of Master in UISplitViewController (见下文)。我已将 Storyboard中的 UISplitViewController 链接到 SplitViewController,并且 viewDidLayoutSubviews() 在 iPad 的初始应用程序加载时被调用。

SplitViewController.swift

override func viewDidLayoutSubviews() {

var masterViewController = (self.viewControllers[0] as! UINavigationController).topViewController
var detailViewController = (self.viewControllers[1] as! UINavigationController).topViewController

// Adjust the width of the detail view
var detailViewFrame = detailViewController!.view.frame
detailViewFrame.origin.x += masterViewController!.view.frame.width
detailViewFrame.size.width -= masterViewController!.view.frame.width
detailViewController!.view.frame = detailViewFrame

detailViewController!.view.setNeedsLayout()
}

但是,当我在 splitViewController?.displayMode == .PrimaryOverlay 中,随后从 MasterViewController 中选择不同的项目时,DetailViewController 框架将恢复为默认框架大小和位置。我尝试使用以下方法解决此问题(尽管不建议以这种方式调用 viewDidLayoutSubviews()):

MasterViewController.swift

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
collapseDetailViewController = false
splitViewController?.viewDidLayoutSubviews()
}

现在当我在 MasterViewController.swift 中选择一个项目时 splitViewController?.viewDidLayoutSubviews() 被调用,但是打印 DetailViewController 的 View 时我得到奇怪的读数.frame.origin.xview.frame.widthviewDidLayoutSubviews() 的末尾。即使对框架进行了这些似乎已经发生的更改,DetailViewController View 仍然被遮盖。

如果有一些关于如何修复 DetailViewController 框架的帮助,即使在 MasterViewController 中选择新项目时也不会被遮挡,我们将不胜感激。我没有运气实现任何 UISplitViewController 委托(delegate)方法来解决这个问题,我还尝试在 末尾使用 loadView 重新加载 SplitViewController >didSelectRowAtIndexPath 但这导致 iPad 屏幕卡住。

最佳答案

对于任何其他想知道如何让主视图 Controller 和详细 View Controller 在 iPad 上并排显示而不重叠的人来说,这真的很简单!只需添加 preferredDisplayMode = .AllVisible。无需使用 MGSplitViewController 等自定义 SplitViewController 或更改 Split View Controller 的框架。 :-)

关于ios - 在 UISplitViewController 的子类中更新 DetailViewController 的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38125544/

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