gpt4 book ai didi

ios - UISearchController 不在旋转时重新显示导航栏

转载 作者:技术小花猫 更新时间:2023-10-29 10:33:39 25 4
gpt4 key购买 nike

我已经实现了 UISearchController,它运行良好,除了......

当我点击搜索栏时,导航栏会按预期消失。当我将手机旋转到横向 View 时,我得到了这个有意义的 View 。

enter image description here

但是,当我将手机旋转回纵向 View 时(在搜索类型区域中仍处于选中状态),我会看到以下 View 。

enter image description here

您可以看到导航栏再也没有出现过。我觉得我正在实现一个基本的搜索 Controller 。 可能是什么原因造成的?

self.venueSearchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.venueSearchController.searchResultsUpdater = self;
self.venueSearchController.searchBar.delegate = self;
self.venueSearchController.dimsBackgroundDuringPresentation = NO;
self.venueSearchController.hidesNavigationBarDuringPresentation = YES;
self.venueSearchController.searchBar.frame = CGRectMake(self.venueSearchController.searchBar.frame.origin.x, self.venueSearchController.searchBar.frame.origin.y, self.venueSearchController.searchBar.frame.size.width, 44.0);

self.definesPresentationContext = YES;

self.navigationController.navigationBar.translucent = YES;
self.venueSearchController.searchBar.translucent = YES;

self.tableView.tableHeaderView = self.venueSearchController.searchBar;

最佳答案

当状态栏重新出现时,UISearchController 似乎忘记重置 searchBar 的框架。我认为这可能是 UISearchController 中的一个错误; radar 中似乎列出了一些.似乎 searchBar 的 super View (在 UISearchController 内部)以错误的高度结束。这是令人烦恼的,因为解决方案因此涉及到 searchController 的 View 层次结构,Apple 可以更改它......您可能想要添加 iOS 版本的检查,以便它仅针对指定版本运行。

如果将下面的代码添加到 View Controller 中,它将在特征集合更改时被调用。它会检查 a) 搜索 Controller 处于事件状态,b) statusBar 未隐藏,c) searchBar origin-y 为 0,如果是这样,它会增加 superview 的高度 statusBar 的高度,移动搜索栏向下。

override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
let app = UIApplication.sharedApplication()
if searchController!.active && !app.statusBarHidden && searchController?.searchBar.frame.origin.y == 0 {
if let container = self.searchController?.searchBar.superview {
container.frame = CGRectMake(container.frame.origin.x, container.frame.origin.y, container.frame.size.width, container.frame.size.height + app.statusBarFrame.height)
}
}
}

objective-c

- (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection {

[super traitCollectionDidChange: previousTraitCollection];

if(self.venueSearchController.active && ![UIApplication sharedApplication].statusBarHidden && self.venueSearchController.searchBar.frame.origin.y == 0)
{
UIView *container = self.venueSearchController.searchBar.superview;

container.frame = CGRectMake(container.frame.origin.x, container.frame.origin.y, container.frame.size.width, container.frame.size.height + [UIApplication sharedApplication].statusBarFrame.size.height);
}
}

关于ios - UISearchController 不在旋转时重新显示导航栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28552967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com