如果我在延迟0.1秒后添加搜索栏,则它不会出现在导航栏中。如果我将延迟更改为0.5秒,则确实会出现。这是因为延迟短时在推动画期间运行吗?在延迟0.1秒后如何显示?
- (void)viewDidLoad
{
[super viewDidLoad];
double delayInSeconds = .1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^{
self.definesPresentationContext = YES;
UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
[self.navigationItem setSearchController:searchController];
[self.navigationItem setHidesSearchBarWhenScrolling:NO];
});
}
答案 0 :(得分:1)
我尝试在项目中执行相同的操作,即使我将延迟指定为0.5秒,但在viewDidLoad
一致中都无法正常工作
在我看来,在viewDidLoad
中执行此操作不是一个好主意(在这种情况下),因为您推送的VC的视图大多在推送动画开始之前就已加载,并且延迟在此之前完成动画完成
在这些情况下,最终对我来说很好:
navigationController?.pushViewController(yourVC, animated: false)
viewDidAppear
中执行所有延迟操作时(这可能是您需要执行的操作)据我所知,在推动动画完成之前分配navigationItem
的{{1}}是
答案 1 :(得分:0)
将您的代码放入此块...将延迟1秒钟,并让我知道是否存在问题
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1, execute: {
})
答案 2 :(得分:0)
这个为我工作
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
self.navigationItem.searchController = self.searchController
self.navigationController?.view.setNeedsLayout()
self.navigationController?.view.layoutIfNeeded()
}