我正在使用 Storyboard开发通用应用程序,并且添加了 UISearchBar
和 UISearchDisplayController
到我的一个 TableView 。我已经把它全部连接起来了,并且可以很好地搜索。问题是当我将一个新的 View Controller 推送到导航堆栈上时。在 iPhone 上,这很好,但在 iPad 上,它会导致推送的 View Controller 在导航栏下方偏移(我必须手动使导航栏重新出现,以便您可以返回)。
然后,当您导航回进行搜索的原始 TableView 时,搜索仍处于事件状态,但 UISearchBar
现在隐藏在导航栏后面,这意味着如果不删除查询就无法关闭它。这也意味着它不再可用,因为您无法重新使用它。
可能最好使用一些屏幕截图来说明。
这是您第一次打开 tableview 时的外观:
然后进行搜索就可以了:
点击进入下一个屏幕,我们可以看到问题:
然后回到原来的屏幕,仍在搜索但没有搜索框:
然后,如果我从搜索框中删除所有内容并摆脱覆盖,我可以在向上滚动表格 View 时看到搜索框,但永远无法到达它。不过,我无法获得可靠的屏幕抓取。
我到处寻找解决方案,但一直找不到。我试过调用[self setNeedsDisplay]
和 [self setNeedsLayout]
在 viewDidAppear
方法,但这似乎没有效果。如果我改变设备的方向,它似乎会自行纠正,并且我试图通过调用这些方法来复制它在那种情况下会做的事情。
iPad Storyboard的结构是:SplitViewController
-> 导航 Controller -> UITabBarController
-> UITableViewController
(包含 UISearchBar
等 f)-> UITableViewController
最佳答案
我将此问题提交给 Apple DTS,他们回复:
iPad Storyboard的结构是:SplitViewController -> Navigation Controller -> UITabBarController -> UITableViewController (包含UISearchBar etc.f) -> UITableViewController
事实是您的项目架构不遵循我们的指导方针,这些指导方针是:
从 iOS View Controller 目录的组合 View Controller 接口(interface)部分:
然而,当组合 View Controller 时,包含的顺序很重要。只有某些安排是有效的。从子到父的收容顺序如下:
内容 View Controller 和具有灵活边界的容器 View Controller (例如页面 View Controller )
导航 View Controller
标签栏 Controller
Split View Controller
基本上,您应该具有如下结构:
SplitViewController -> UITabBarController -> 导航 Controller -> UITableViewController (包含 UISearchBar etc.f) -> UITableViewController>
关于cocoa-touch - iPad表格 View 上的UISearchBar消失在导航 Controller 栏下方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9809601/