UISearchController搜索栏的位置下落64点

问题描述:

好吧,我已经花了8个小时以上在这个没有运气。UISearchController搜索栏的位置下落64点

搜索栏出现正好64点太低:

enter image description here

所有其它帧是完全正确的。

编辑: - 这是UISearchController的看法,得到错误origin.y。它被设置为64,当它应该是0 如果我加入这个方法:

- (void)didPresentSearchController:(UISearchController *)searchController 
{ 
    [super didPresentSearchController:searchController]; 
    searchController.view.frame = CGRectMake(0, 0, searchController.view.frame.size.width, searchController.view.frame.size.height); 

} 

随后的意见一致。然而,它跳跃,因为它跳跃。如果我修改willPresentSearchController中的框架,它不起作用,因为控制器必须在提交后进行某种布局。

如果我使用SparkInspector,并从原点64(它被设置为0)编辑UISearchBarContainerView的帧,问题就解决了。

这里是我的相关配置:

​​ 我不使用Interface Builder

,一切都在代码中配置。 我敢肯定,设置definesPresentationContext是正确的。

的VC坐落在一个常规UINavigationController,这是一个SplitViewController内(但在iPhone上存在以及问题)。

任何想法?我觉得我缺少关于一个简单的配置选项的UINavigationBar

我也有一个使用自定义容器视图控制器模式,这是比较复杂的,并且一个作品不同的控制器。

当我设置

self.definesPresentationContext = NO; 

出现这种情况: enter image description here

所以现在UISearchBar被正确定位,但表示上下文是错误的,引起了UISearchController的表视图占据全视角。

在经典时尚
+0

谢谢你给我解决你的问题。 它帮助。自。definesPresentationContext = NO; – Coder

好了,我已经找到了解决办法(https://*.com/a/30010473/579217

该做的伎俩:

- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar 
{ 
    if (bar == self.searchController.searchBar) { 
    return UIBarPositionTopAttached; 
    } 
    else { // Handle other cases 
    return UIBarPositionAny; 
    } 
} 

如果您的tableView是自定义的UITableView,而不是一个UITableViewController你应该隐藏的顶部tableview下的导航栏,因为搜索栏自动附加在表视图的标题,如果你的表视图开始下导航栏我导致这个问题。只需从导航栏顶部将表格视图全屏。

+0

我的表格视图是自定义的,但是我使用tableview的contentInsets而不是标题视图手动附加搜索栏,因为我希望它始终可见。我之前让搜索控制器隐藏了导航栏,但它看起来很笨拙,我个人喜欢让导航栏仍然可见,这样用户可以在仍然搜索时快速访问其他操作。 – JBlake

+0

因此,如果tableview是自定义的,只需在tableview之前添加搜索栏即可。然后在搜索栏下添加表格视图,并在搜索栏下隐藏表格视图的标题。它会如你所愿。:) – rmammadli