3

我有一个 UIViewController,里面有 Segmented Control 和 UITableView。全部使用自动布局,在情节提要中设置。这是我在那里设置的约束的代码版本:

H:|-[SegmentedControls]-| 
H:|[TableView]|
V:|-[SegmentedControls]-[TableView]|

我添加了 UISearchController 和 UISearchbar 作为表格的标题视图。为了显示搜索结果,我创建了一个新的 UITableViewController。

UITableViewController *searchResultsController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
searchResultsController.tableView.dataSource = self;
searchResultsController.tableView.delegate = self;

self.searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController];
self.searchController.delegate = self;
self.searchController.searchResultsUpdater = self;
self.searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, self.searchController.searchBar.frame.origin.y, self.searchController.searchBar.frame.size.width, 44.0);
self.clientListTable.tableHeaderView = self.searchController.searchBar;
self.searchController.searchBar.scopeButtonTitles = @[@"Active", @"Inactive"];
self.definesPresentationContext = YES;

但后来我遇到了以下问题 - 当我按下搜索栏时,它会动画,但呈现的视图只占据屏幕的一部分,在顶部和底部以变暗的铬呈现,而不是全屏呈现。呈现的视图的大小似乎等于承载搜索栏的表格视图之一,只是在屏幕上垂直居中。我对如何覆盖搜索结果的呈现一无所知,以使它们全屏显示。我尝试在呈现视图控制器和正在呈现的视图控制器上显式设置ModalPresentationStyle,但它不起作用。我感觉我需要以某种方式覆盖搜索结果的演示控制器,但我不知道从哪里开始,有什么想法吗?

4

1 回答 1

0

在使用解决方法大约一年后(手动管理来自 UISearchBar 的输入,没有 UISearchController),我找到了解决方案。SearchController 在一个新表中显示一个带有结果的表,该表设置为与调用它的表相同的大小。因此,由于我的表格只是视图的一部分,因此呈现的表格也不是全屏的。我犯的错误是,我确实尝试隐藏分段控件,但我没有更新约束(当时的自动布局仍然不是很好)。因此,在观看了今年 WWDC 关于“汽车布局之谜”的演讲后,我想出了一个解决方案:

    -(void)willPresentSearchController:(UISearchController *)searchController {

[UIView animateWithDuration:0.5
                      delay:0.0
                    options: UIViewAnimationOptionCurveEaseInOut
                 animations:^(void) {
                     [NSLayoutConstraint deactivateConstraints:@[_constraintToTheSegmentalControls,_constraintToTheTop]];
                     [NSLayoutConstraint activateConstraints:@[_constraintToTheTop]];
                     self.segmentedControls.hidden = YES;
                 }
                 completion:NULL];
}

   -(void)didDismissSearchController:(UISearchController *)searchController {

[UIView animateWithDuration:0.5
                      delay:0.0
                    options: UIViewAnimationOptionCurveEaseInOut
                 animations:^(void) {
                     [NSLayoutConstraint deactivateConstraints:@[_constraintToTheSegmentalControls,_constraintToTheTop]];
                     [NSLayoutConstraint activateConstraints:@[_constraintToTheSegmentalControls]];
                     self.segmentedControls.hidden = NO;
                 }
                 completion:NULL];
}

约束“constraintToTheSegmentalControls”是从表格视图顶部到分段控件底部的约束,默认是活动的。约束“constraintToTheTop”是从表格视图顶部到顶部布局指南的约束,默认情况下是不活动的。我将它们都添加为我的视图控制器的 IB 引用。

动画仍然需要一些调整,但解决方案是有效的。

于 2015-09-16T16:33:40.680 回答