我在我的应用程序中有以下代码,特别是在viewDidLoad:设置我的UISearchController.
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.hidesNavigationBarDuringPresentation = NO;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.definesPresentationContext = NO;
self.searchController.searchBar.scopeButtonTitles = @[];
self.searchController.searchBar.searchBarStyle = UISearchBarStyleProminent;
[_tableView setTableHeaderView:_searchController.searchBar];
Run Code Online (Sandbox Code Playgroud)
每当tableView调用搜索栏(添加到搜索栏)时,UIStatusBar颜色从UIStatusBarStyleLightContent暗变为白色(白色变为黑色).现在,我想出我是否设置,
self.definesPresentationContext = NO;
Run Code Online (Sandbox Code Playgroud)
以下内容:
self.definesPresentationContext = YES;
Run Code Online (Sandbox Code Playgroud)
问题得到解决,UIStatusBar颜色得以保留.但是,出现了另一个问题.当self.definesPresentationContext设置为YES
,在调用时,搜索栏由于某种原因向下移动,同时(或正确地)在UIRefreshControl显示器底部的下方tableView.
uitableview ios uistatusbar uirefreshcontrol uisearchcontroller
我的项目正在使用ContactsiOS 9中引入的新框架
我的几个UITableView子类调用了一个CNContactPicker,我想使用顶部显示的搜索栏.
这些视图中的一些只是实现委托方法 - contactPicker:didSelectContact:另一个实现了该方法以及 - contactPicker:didSelectContacts:,其实现导致CNContactPicker允许多个选择.
我让各个类声明它们是,UISearchControllerDelegates并且很高兴看到只需要使用我的contactPicker委托方法进行选择.
不幸的是,第三个视图不起作用 - 您在搜索字段中键入内容,它会根据您键入的内容提供过滤器列表,但是当您点击选择时,选择会突出显示但不会发生任何其他情况.如果我回到代码并注释掉contactPicker:didSelectContacts:方法然后它工作,
据推测,有一种方法可以使此响应,否则CNContactPicker当允许多个选择时,视图将不会显示搜索栏.
我应该怎么做才能使这项工作?
搜索栏正好显示为64点太低:
所有其他帧都完全正确.
编辑: - 这UISearchController是错误的观点origin.y.它设置为64,当它应该为0.如果我添加此方法:
- (void)didPresentSearchController:(UISearchController *)searchController
{
[super didPresentSearchController:searchController];
searchController.view.frame = CGRectMake(0, 0, searchController.view.frame.size.width, searchController.view.frame.size.height);
}
Run Code Online (Sandbox Code Playgroud)
然后视图对齐.然而,它的janky因为它跳跃.如果我在willPresentSearchController其中修改框架不起作用,因为控制器必须在其呈现后进行某种布局.
如果我使用SparkInspector,并编辑UISearchBarContainerViewfrom origin 64 的框架(它设置为0,为0),问题就解决了.
这是我的相关配置:
self.searchResultsController = [[GMSearchTableViewController alloc] init];
self.definesPresentationContext = YES;
self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsController];
self.searchController.dimsBackgroundDuringPresentation = YES;
self.searchController.hidesNavigationBarDuringPresentation = NO;
self.searchController.searchBar.frame = CGRectMake(0, 0, self.view.frame.size.width, 44);
[self.view addSubview:self.searchController.searchBar];
Run Code Online (Sandbox Code Playgroud)
我没有使用Interface Builder,一切都是在代码中配置的.我很肯定,设置definesPresentationContext是正确的.
VC位于一个常规的UINavigationController,它位于SplitViewController内部(但iPhone上也存在问题).
我觉得我错过了一个简单的配置选项 UINavigationBar
我还有一个不同的控制器,它使用一个更复杂的自定义容器视图控制器模型,并且可以使用.
当我设置
self.definesPresentationContext = NO;
Run Code Online (Sandbox Code Playgroud)
所以现在UISearchBar获取正确,但是表示上下文是错误的,导致UISearchController表视图占据整个视图.
我正在从具有大样式UINavigationItem的视图转换为具有大样式UINavigationItem和视图的视图UISearchController.我已经定制了背景颜色UINavigationBar.
出于某种原因,在UINavigationBar和之间有1px的线或空间UISearchController.我可以告诉它NavigationBar,因为如果我滚动以便搜索栏粘在顶部,那么该线就会消失.我只是不确定是什么产生了这条线.我没有使用阴影,或任何花哨的东西,除了设置barTintColor和tintColor.如果我不使用大型标题,我会看到该行,但仅限于在视图之间转换时.这就像过渡时UISearchController刚刚过去的那样UINavigationBar.
任何帮助确定这条线的来源是值得赞赏的.
更新:在进一步的调查中,似乎只有在navigationItem.hidesSearchBarWhenScrolling设置为时才会发生false.如果它最初是隐藏的,那么前一个视图中的动画是平滑的,并且显示条形也是平滑的.
当我开始在UISearchController.searchBar中输入时,我试图找出为什么我的整个导航栏消失了它正确加载并动画正确,但是当我开始输入时我失去了活动的NavBar.这是从viewDidLoad加载searchController的代码:
UITableViewController *searchResultsController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
searchResultsController.tableView.dataSource = self;
searchResultsController.tableView.delegate = self;
searchResultsController.tableView.backgroundColor = [UIColor redColor];
self.searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController];
self.searchController.delegate = self;
self.searchController.searchResultsUpdater = self;
self.searchController.dimsBackgroundDuringPresentation = YES;
self.searchController.hidesNavigationBarDuringPresentation = NO;
[self.searchController.searchBar sizeToFit];
self.tableView.tableHeaderView = self.searchController.searchBar;
self.definesPresentationContext = NO;
Run Code Online (Sandbox Code Playgroud)
这是我开始输入后的结果:

注意表格视图是如何存在的,但它似乎占据了导航控制器的空间并向下延伸到第一部分标题中.有任何想法吗?
谢谢.
关于我们观点设定的一点背景:
在a里面NavigationController,我们有一个UITabBarController(带有3个标签),UIViewController其中有一个UISearchController.
有一个错误,如果我们离开UISearchController活动并切换到另一个视图,当我们返回到搜索视图时,整个屏幕都是黑色的.但是,当UISearchController它不活动并且我们切换视图时,这不会发生.
我们试图在控制视图之间设置控制器不活动; 然而,当UISearchController是segueing事件的活跃没有得到所谓的(没有日志打印从出现viewWillDissapear,viewWillAppear等等)
在其他线程上查看,我们尝试了设置,self.definesPresentationContext = true
但这不起作用.
有没有其他人有这个问题或知道如何解决它?
注1:这个问题涉及在更新的表视图之外添加UISearchController的搜索栏 - 而不是表视图的标题.
注2:一些反复试验让我找到了解决方案.请参阅下面的答案.
我是iOS开发的新手,并且正在努力使用UISearchController类.我有一个视图控制器,在我的视图控制器视图中,我计划在表视图上方有一个搜索栏.我希望搜索栏链接到UISearchController.由于接口构建器没有UISearchController,我以编程方式添加控制器.在实例化UISearchController之后,我尝试以编程方式将搜索控制器的搜索栏添加到我的视图中但尚未成功.我已经尝试设置搜索栏的框架并给它自动布局约束,但这两种方法都没有对我有效(即当我运行应用程序时,什么都没有出现).这是我尝试过的最新代码:
let searchController = UISearchController(searchResultsController: nil)
// Set the search bar's frame
searchController.searchBar.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 50)
// Constraint to pin the search bar to the top of the view
let topConstraint = NSLayoutConstraint(item: searchController.searchBar, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 0)
searchController.searchBar.setTranslatesAutoresizingMaskIntoConstraints(false)
self.view.addSubview(searchController.searchBar)
self.view.addConstraint(topConstraint)
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!谢谢!
编辑:只使用其中一个设置搜索栏的框架或你给它自动布局约束(而不是我最初尝试的组合)似乎首先工作,但点击搜索栏后你会遇到问题指出由德怀特.我已经离开了这些案例的代码,以防它与您现有的内容进行比较,但是对于一个有效的解决方案,请参阅下面的答案.
使用自动布局约束:
let searchController = UISearchController(searchResultsController: nil)
let topConstraint = NSLayoutConstraint(item: searchController.searchBar, attribute: NSLayoutAttribute.Top, relatedBy: …Run Code Online (Sandbox Code Playgroud) uisearchbar ios programmatically-created swift uisearchcontroller
我已经实现了一个UISearchBar来搜索外部API中的项目目录.搜索功能按预期工作,但问题是,每次按下取消按钮(位于搜索栏文本字段的右侧)时,整个搜索栏向下移动一行,看起来它会推动整个表视图也是如此.
因此,如果我在搜索栏文本字段中键入一个字母,然后按取消,搜索栏文本字段向下移动44px,这是行高,并且表视图本身也会被按下相同的量.如果我连续按类型,然后按取消,搜索栏将在视图中进一步向下移动.任何建议都会很棒!这是我的代码:
import Foundation
import UIKit
import ItemLogger
private extension Selector {
static let dismiss = #selector(SearchVC.dismissView)
}
extension SearchVC: UISearchResultsUpdating {
func updateSearchResultsForSearchController(searchController: UISearchController) {
let searchBar = searchController.searchBar
let scope = searchBar.scopeButtonTitles![searchBar.selectedScopeButtonIndex]
filterContentForSearchText(searchController.searchBar.text!, scope: scope)
}
}
extension SearchVC: UISearchBarDelegate {
func searchBar(searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
filterContentForSearchText(searchBar.text!, scope: searchBar.scopeButtonTitles![selectedScope])
}
}
class SearchVC: UITableViewController {
let searchController = UISearchController(searchResultsController: nil)
var searchedItems = [ItemLog]()
var searchedImages = [UIImage]()
override func viewDidLoad() {
super.viewDidLoad()
let leftBarButtonItem = …Run Code Online (Sandbox Code Playgroud) 据崩溃论说,发生了以下崩溃(很少).
应用程序试图在自身上呈现模态视图控制器.提出控制器是.
我根本无法复制这个问题.这就是我设置UISearch控制器的方法.
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.searchBar.delegate = self;
self.tableView.tableHeaderView = self.searchController.searchBar;
self.definesPresentationContext = YES;
Run Code Online (Sandbox Code Playgroud)
任何帮助都表示赞赏,因为我完全没有想法.如果需要,我会发布更多代码.
我正面临导航栏的问题。我正在添加searchController导航项的搜索控制器。
请参阅以下链接上的图片: 导航栏问题
脚步:
1)我在表格视图中有数据,当我点击单元格时,它是带有自定义导航视图的打开详细信息屏幕。这工作正常。(默认导航栏是隐藏的)
2)现在,我点击了搜索栏,然后点击了表格视图单元格。它向我显示了详细信息屏幕的默认导航栏。我不想显示默认导航栏。
我为实现搜索控制器而编写的代码如下:
searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search here..."
searchController.searchBar.tintColor = .white
searchController.searchBar.barTintColor = .white
if let textfield = searchController.searchBar.value(forKey: "searchField") as? UITextField {
textfield.textColor = UIColor.blue
if let backgroundview = textfield.subviews.first {
// Background color
backgroundview.backgroundColor = UIColor.white
// Rounded corner
backgroundview.layer.cornerRadius = 10;
backgroundview.clipsToBounds = true;
}
}
self.navigationItem.searchController = self.searchController
definesPresentationContext = true
Run Code Online (Sandbox Code Playgroud)
下面是在 didSelect 方法中隐藏导航栏的代码:
self.navigationController?.navigationBar.isHidden = true
self.navigationController?.isNavigationBarHidden = true
Run Code Online (Sandbox Code Playgroud) ios ×7
swift ×4
uisearchbar ×4
objective-c ×2
uitableview ×2
cncontact ×1
ios8 ×1
ios9 ×1
uistatusbar ×1