gpt4 book ai didi

ios - Swift 4 - iOS 11 搜索栏范围不会出现,因为它应该

转载 作者:可可西里 更新时间:2023-11-01 06:18:22 24 4
gpt4 key购买 nike

我有一个应用程序在 iOS 10 上运行良好且没有任何问题,但在 iOS 11 和 Xcode Beta 5 上,我遇到了搜索栏范围的奇怪问题,范围栏似乎是从底部切下来的。 (所有版本的 Xcode beta 和 iOS 11 都一样)如果有人能把我引向正确的方向,我真的很高兴。谢谢

Initial Screen

在上面你可以看到当我按下汉堡包菜单按钮时我看到的。这里没问题..searchbar 也有一个范围栏,它在单击时显示。我没有将它设置为以编程方式显示。但我想这是设置范围按钮标题时的默认行为。

问题:

problem

当我点击搜索栏输入信息时,我看到了上面的屏幕。在 iOS 10 上我没有遇到任何问题。但是现在,对于 iOS 11,无论我做什么,我都无法让它像在 iOS 10 上那样工作。搜索范围栏显示出来,就像它是从底部切下来的一样。

这是它在 iOS 10 中的显示方式,我希望它在 iOS 11 中显示。

workingInIOS10

屏幕的 Storyboard View

storyboard view of the screen

我把相关代码贴在这里。

    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])
}
}

编辑:如果我向搜索栏添加约束,就会发生这种情况。首先,一切似乎都很好。

withConstraints1st

然后,当您单击搜索栏时,会发生这种情况。搜索栏会移出屏幕。见箭头。

withConstraints2nd

但是如果你关闭滑动菜单然后重新打开它

withConstraints3rd

一切正常,直到您单击取消按钮。之后,您必须再次执行所有这些操作才能看到搜索栏正常工作。

约束代码

 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))

最佳答案

查看 this WWDC 2017 video .

你应该这样做:

if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
} else {
tableView.tableHeaderView = searchController.searchBar
}

然后进行相应的更改。

关于ios - Swift 4 - iOS 11 搜索栏范围不会出现,因为它应该,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45782669/

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