gpt4 book ai didi

iOS:在主从应用程序的导航栏中添加搜索栏

转载 作者:行者123 更新时间:2023-11-28 06:02:13 27 4
gpt4 key购买 nike

我做了什么?

我使用 Xcode 9 模板在 Swift 中创建了一个支持核心数据的通用主从应用程序。

我想要什么?

我想在详细信息的导航栏中添加一个搜索栏。

我是怎么做到的?

let searchController = UISearchController(searchResultsController: nil)
navigationItem.searchController = searchController

会发生什么? (实际问题)

搜索栏不会出现在详细信息的导航栏中。相反,导航栏失去了它的阴影线,当我回到母版时,搜索栏出现在动画时间的导航中,然后消失。

enter image description here

只有当我在 iPhone 上运行代码时才会出现此问题,而不会在 iPad(或横向模式的 iPhone)上发生,因为在 iPad(或横向模式的 iPhone)上, Split View在左侧包含主视图,在右侧包含详细 View 。

对我来说,导航栏似乎有问题,但我就是无法理解它。

您可以下载示例项目here在 Github 上。

最佳答案

我已经将它隔离到从 TableView 项到 {NavigationController-DetailViewController} 的 segue(种类 = 显示详细信息(例如替换))。该 segue 的工作是替换 Split View中的详细 View Controller ,或者以紧凑模式推送详细 View Controller 。

例如,如果撕掉 Show Detail(例如 Replace)segue,并使用“Show(例如 Push)”segue 类型将表格 View 单元格直接连接到 DetailViewController,则 UISearchBar 将按预期显示。

对于这种情况,看起来 segue 正在以一种影响搜索栏内的搜索 Controller 的方式呈现 View Controller 。设备之间的代码路径差异很大,这可以解释为什么它可以在 iPad 上运行。

Apple 的开发人员技术支持已确认这是 iOS 中的错误。

作为一种廉价的解决方法是使用自定义 segue 手动执行自适应呈现(推送或替换):

class PushOrPresentSegue: UIStoryboardSegue
{
override func perform() {
let splitVC = self.source.splitViewController
let destVC = self.destination
let nav = destVC as! UINavigationController
let topVC = nav.topViewController

if (splitVC?.traitCollection.horizontalSizeClass == .regular) {
// Replace
let splitViewControllerVCs = splitVC?.viewControllers
splitVC?.viewControllers = [splitViewControllerVCs![0], destVC];
}
else
{
// Push
let sourceVC = self.source
sourceVC.navigationController?.pushViewController(topVC!, animated: true)
}
}

}

在 Storyboard 中,必须将 Master View Controller 的单元格与 Detail ViewContorller 的 Navigation Controller 之间的转场更改为:Kind = Custom, Class = PushOrPresentSegue

关于iOS:在主从应用程序的导航栏中添加搜索栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49288481/

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