Ken*_*and 31 uitableview uisearchbar uisearchdisplaycontroller ios uicontainerview
我有一个UITableViewController与UISearchBar和UISearchDisplayController.它存在于UIVavigationController中的UIViewController中的Container视图中.我制作了这张图片来帮助描述结构:

这就是它的真实情况:

当我点击搜索栏时,我必须隐藏导航栏.通常情况下,这会自行发生,但由于我的UITableViewController在Container View中,我必须自己处理这个更改.这就是它的样子,注意状态栏是白色的,因为导航栏是白色的,即使它现在是隐藏的.

一旦我开始输入一些搜索文本,结果就会显示出来.如果我向上滚动这些结果,它们会在搜索栏下方传递,但它们与状态栏重叠,这非常没有吸引力.

如果不涉及容器视图,则这一切都按预期工作,并且表内容在状态栏下方传递,但是涉及ContainerView时,表文本和状态栏会发生冲突.
如何使状态栏下的文本正常运行?
non*_*ays 36
我已经搜索了几个小时,我的最终结果是将这一行放在viewDidLoad中:
self.extendedLayoutIncludesOpaqueBars = YES;
问题解决了 :)
尝试将definesPresentationContext在viewDidLoad你的TableViewController
迅速
override func viewDidLoad() {
super.viewDidLoad()
definesPresentationContext = true
}
Run Code Online (Sandbox Code Playgroud)
Objective-C的
- (void)viewDidLoad {
[super viewDidLoad];
self.definesPresentationContext = YES;
}
Run Code Online (Sandbox Code Playgroud)
基本上,这是由于导航栏的半透明造成的,通常视图控制器通过更正拥有的视图或子视图的顶部插图(如果它们是(或继承)自 UIScrollView )来修复重叠。您有 2 个选项,一个是将导航栏的半透明度设置为“否”,另一个是将导航栏设置edgeForExtendedLayout为“无”,只留下底部。
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller {
self.navigationController.navigationBar.translucent = YES;
}
- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller {
self.navigationController.navigationBar.translucent = NO;
}
Run Code Online (Sandbox Code Playgroud)
如果您在较低的目标上进行部署,那么这些建议仅适用于 iOS7,然后在设置这些属性之前进行检查。
另一种方法,但我没有测试可以读取长度--topLayoutGuide并在 -searchDisplayControllerWillBeginSearch尝试设置相同长度的 topInsets 。这样你仍然应该保持半透明。
| 归档时间: |
|
| 查看次数: |
13061 次 |
| 最近记录: |