The*_*r33 3 uisearchbar ios swift4
我有一个应用程序在iOS 10上运行良好且没有任何问题,但是对于iOS 11和Xcode Beta 5,我在搜索栏范围内遇到了这个奇怪的问题,其中范围栏似乎是从底部剪切的.(对于Xcode beta和iOS 11的所有版本都是如此)如果有人能让我朝着正确的方向前进,我真的很高兴.谢谢
在上面你可以看到我按下汉堡菜单按钮时看到的内容.这里没问题..搜索栏还有一个范围栏,当点击时显示.我没有设置它以编程方式显示.但我想这是设置范围按钮标题时的默认行为.
问题:
当我点击搜索栏输入信息时,我会看到上面的屏幕.在iOS 10上,我没有遇到任何问题.但是现在,在iOS 11中,无论我做什么,我都无法让它像在iOS 10上一样工作.搜索范围栏显示为从底部剪切.
这是它在iOS 10中的显示方式,我希望它在iOS 11中.
屏幕的故事板视图
我在这里粘贴相关代码.
class SlideMenuViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UISearchControllerDelegate,UIGestureRecognizerDelegate{
let searchController = UISearchController(searchResultsController: nil)
@IBOutlet var sview: UIView!
@IBOutlet var tableView: UITableView!
override func viewWillAppear(_ animated: Bool) {
//some non relevant code before this
if sview.subviews .contains(searchController.searchBar) {
print("Already contains")
} else {
sview.addSubview(searchController.searchBar)
print(searchController.searchBar.showsScopeBar)
searchController.searchBar.sizeToFit()
searchController.searchBar.frame.size.width = view.frame.size.width
searchController.searchBar.barTintColor = searchBarTintColor
searchController.searchBar.tintColor = searchTintColor
}
}
override func viewDidLoad() {
//some other code
searchController.searchBar.delegate = self
searchController.searchBar.scopeButtonTitles = [NSLocalizedString("?simlerde", comment: ""), NSLocalizedString("Aç?klamalarda", comment: "")]
searchController.searchBar.returnKeyType = UIReturnKeyType.done
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
//some other code
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searchController.isActive && searchController.searchBar.text != "" {
switch scpglobal {
case NSLocalizedString("?simlerde", comment: ""):
return filteredIsimler.count
case NSLocalizedString("Aç?klamalarda", comment: ""):
return filteredAciklamalar.count
default:
print("Tableview default")
}
}
return isimlerArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//some code about search here but nothing that will result in that behaviour
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
print("cancel")
searchController.searchBar.text = ""
}
func updateSearchResults(for searchController: UISearchController) {
let searchBar = searchController.searchBar
let scope = searchBar.scopeButtonTitles![searchBar.selectedScopeButtonIndex]
filterContentForSearchText(searchText: searchController.searchBar.text!, scope: scope)
tableView.reloadData()
}
}
extension SlideMenuViewController:UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
filterContentForSearchText(searchText: searchController.searchBar.text!, scope: searchController.searchBar.scopeButtonTitles![selectedScope])
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:如果我向搜索栏添加约束,会发生这种情况.首先一切似乎都很好.
然后,当您单击搜索栏时,会发生这种情况.搜索栏移出屏幕.见箭头.
但是如果你关闭滑动菜单然后重新打开它
一切正常,直到您单击取消按钮.之后,您必须再次执行此操作才能看到搜索栏正常工作.
约束的代码
searchController.searchBar.translatesAutoresizingMaskIntoConstraints = false
sview.addConstraint(NSLayoutConstraint(item: searchController.searchBar, attribute: .top, relatedBy: .equal, toItem: sview, attribute: .top, multiplier: 1, constant: 0))
sview.addConstraint(NSLayoutConstraint(item: searchController.searchBar, attribute: .bottom, relatedBy: .equal, toItem: sview, attribute:.bottom, multiplier: 1, constant: 0))
sview.addConstraint(NSLayoutConstraint(item: searchController.searchBar, attribute: .leading, relatedBy: .equal, toItem: sview, attribute: .leading,multiplier: 1, constant: 0))
sview.addConstraint(NSLayoutConstraint(item: searchController.searchBar, attribute: .trailing, relatedBy: .equal, toItem: sview, attribute: .trailing, multiplier: 1, constant: 0))
Run Code Online (Sandbox Code Playgroud)
ale*_*ash 14
你应该做这样的事情:
if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
} else {
tableView.tableHeaderView = searchController.searchBar
}
Run Code Online (Sandbox Code Playgroud)
然后相应地进行所需的更改.
| 归档时间: |
|
| 查看次数: |
7204 次 |
| 最近记录: |