iOS 12中的UINav条和搜索条

时间:2018-10-17 19:36:35

标签: uisearchcontroller uinavigationitem searchbar ios12

我有一个旧的ObjC iOS 9.3应用程序,我正在更新到iOS 12和iPhone X系列。 主视图是一个UIViewController,具有使用STCollapseTableView的嵌入式UITableView。该表具有自定义的UISearchController,该UISearchController通过带有带有除了常用的textField和Cancel按钮之外的按钮的segmentedControl的搜索栏进行定制。表格最初会向上偏移搜索块的高度以将其隐藏起来,直到用户将表格向下拖动为止。一切都很原始,并且在较旧的操作系统上运行正常。

现在: 在ViewDidLoad&Appear上可以很好地显示tableview的初始显示。 初始拖动表格即可,搜索栏仅显示所需的文本字段和取消按钮。 第一个问题:点击文本框以获取焦点,然后在其中移动搜索条目文本框并取消按钮,在其下根据需要绘制分段控件,然后将整个搜索栏向上移动到Nav区域中,大约等于搜索栏加按钮的高度。这会将tableView与填充背景空白的搜索栏分开。 此时,“取消”按钮仍然有效,其操作会将表格视图移回搜索栏。

文本输入以及搜索和限制功能仍然可以正常工作,并适当地填充表格视图。

第二个大问题:用户从搜索结果中选择了一个详细视图并返回到主表视图后,搜索栏现在在导航/状态栏内进一步偏移,其中(iPhoneX)凹口下方的文本字段和“取消”电池状态下的按钮,并且无法触摸;或者iPhone8的屏幕上方几乎看不到带有搜索栏的iPhone8,已超过安全区域。这种升级发生在iOS 12设备上,而不是在iOS 10.3.3设备上。

以下是相关代码:  MainVC中的搜索控制器定义

    // Here's where we create our UISearchController

    self.MySearchResultsController = [[UISearchController alloc] initWithSearchResultsController:nil];
    self.MySearchResultsController.searchResultsUpdater = self;
    self.MySearchResultsController.searchBar.delegate = self;

    UITextInputAssistantItem* item = [self.MySearchResultsController inputAssistantItem];
    item.leadingBarButtonGroups = @[];
    item.trailingBarButtonGroups = @[];

    self.MySearchResultsController.searchBar.scopeButtonTitles = @[@"",@"",@"",@""];
    id temp = [UISegmentedControl appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]];
    UIImage * img = [UIImage imageNamed:@""];
    [temp setImage:img forSegmentAtIndex: 1];
    img = [UIImage imageNamed:@""];
    [temp setImage:img forSegmentAtIndex: 3];
    img = [UIImage imageNamed:@""];
    [temp setImage:img forSegmentAtIndex: 2];

    self.MySearchResultsController.searchBar.showsScopeBar = YES;
    self.MySearchResultsController.searchBar.keyboardType = UIKeyboardTypeASCIICapable;
    [self.MySearchResultsController.inputAccessoryView reloadInputViews];
    [self.MySearchResultsController.searchBar sizeToFit];
    // Add the UISearchBar to the top header of the table view
    self.tableView.tableHeaderView = self.MySearchResultsController.searchBar;
    // Hides search bar initially.  When the user pulls down on the list, the search bar is revealed.
    [self.tableView setContentOffset:CGPointMake(0, self.MySearchResultsController.searchBar.frame.size.height)];

    // It is usually good to set the presentation context.
    self.definesPresentationContext = YES;
    self.MySearchResultsController.obscuresBackgroundDuringPresentation = NO;
    self.MySearchResultsController.dimsBackgroundDuringPresentation = NO;
    if (@available(iOS 11.0, *)) {
        self.navigationController.navigationItem.searchController = _MySearchResultsController;
        self.navigationController.navigationItem.hidesSearchBarWhenScrolling = false;
        [self.MySearchResultsController setActive:YES];
    } else {
        self.tableView.tableHeaderView = self.MySearchResultsController.searchBar;
//        [self presentSearchController:_MySearchResultsController];
    }

Main TableVC中的另一个功能是detailVC的展开

-(IBAction)unwindFromNewDetailViewController:(UIStoryboardSegue *) segue {
    NewDetailViewController *dVC = [segue sourceViewController];
    NSIndexPath *newPath = dVC.returningIndexPath;
    if (newPath == nil) {
        newPath = [NSIndexPath indexPathForRow:(NSInteger)0 inSection:(NSInteger)0];
    }
    if (_inFilterMode) {
        newPath = _selectedIndexPath;
        [self.tableView setContentOffset:CGPointMake(0, self.MySearchResultsController.searchBar.frame.size.height)];
    }
    [self.tableView reloadData];
    [self.tableView openSection:newPath.section animated:YES];
    [self.tableView scrollToRowAtIndexPath:newPath
                          atScrollPosition:UITableViewScrollPositionMiddle
                                  animated:YES];
}

这是从DetailVC返回的内容:viewWillDisappear {}

if (_inSearchMode) {
    p = [NSIndexPath indexPathForRow:(NSInteger)0 inSection:(NSInteger)0];
}
[self performSegueWithIdentifier:@"unwindNewDetailToMainTable" sender:self];
[super viewWillDisappear:YES];

对于我的错误编码或如何在屏幕上强制重新放置searchBar和navBar的任何想法,我将不胜感激。

0 个答案:

没有答案