【问题标题】:iOS 10 `rightBarButtonItem` moves outside of navigation bariOS 10 `rightBarButtonItem` 移出导航栏
【发布时间】:2018-01-05 18:06:56
【问题描述】:

在我的视图控制器中,我在导航栏中显示搜索控制器。

/*set appearance of search controller */
    _searchController = [[UISearchController alloc]initWithSearchResultsController:nil];
    _searchController.searchBar.delegate = self;
    _searchController.searchResultsUpdater = self;
    [_searchController.searchBar sizeToFit];
    _searchController.dimsBackgroundDuringPresentation = NO;
    self.definesPresentationContext = YES;
    _searchController.hidesNavigationBarDuringPresentation = NO;
    _searchController.searchBar.searchBarStyle = UISearchBarStyleDefault;

我还在rightBarButtonItem 的帮助下创建了一个排序按钮。

    /*add drop down sort menu button to navigation bar */
    [self.navigationController.navigationBar setBarTintColor:[UIColor blackColor]];
    self.navigationController.navigationBar.translucent = NO;
    self.navigationItem.titleView = self.searchController.searchBar;

    UIBarButtonItem *rightButtonItem = [[UIBarButtonItem alloc] initWithTitle:@""
                                                                        style:UIBarButtonItemStyleDone
                                                                       target:self
                                                                       action:@selector(displaySortMenu:)];

    self.navigationItem.rightBarButtonItem = rightButtonItem;
    rightButtonItem.image = [UIImage imageNamed:@"Sort"];

    self.navigationItem.rightBarButtonItem.imageInsets = UIEdgeInsetsMake(6, 0, 0, 0);

在 iOS 11 中,排序按钮位于导航栏中的搜索控制器旁边,如下所示:

但是,在 iOS 10 中,按钮完全移出导航栏:

我的第一个想法是将按钮限制在willLayoutSubviews 中,但由于按钮没有view 组件,我无法将translatesAutoresizingMaskIntoConstraints 设置为NO然后,我通过完全移除搜索控制器来检查将搜索控制器放置在导航栏内是否存在问题。仍然(在 iOS 10 中)该按钮位于导航栏之外:

如何将rightBarButtonItem 修复到 iOS 10 及更早版本的导航栏内

【问题讨论】:

标签: ios objective-c uinavigationbar uisearchcontroller


【解决方案1】:

我需要释放为它创建的原始按钮,以使其作为条形按钮项正确停留在导航栏中。

[self.navigationController.navigationBar setBarTintColor:[UIColor blackColor]];
    self.navigationController.navigationBar.translucent = NO;
    self.navigationItem.titleView = self.searchController.searchBar;

UIBarButtonItem *rightButtonItem = [[UIBarButtonItem alloc] initWithTitle:@""
                                                                    style:UIBarButtonItemStyleDone
                                                                   target:self
                                                                   action:@selector(displaySortMenu:)];
rightButtonItem.image = [UIImage imageNamed:@"Sort"];
self.navigationItem.rightBarButtonItem = rightButtonItem;
[rightButtonItem release]; // <-- this is the new line!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 2017-06-05
    相关资源
    最近更新 更多