Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在tableview中搜索栏作为标题-显示和消失_Ios_Swift_Ios11_Swift4 - Fatal编程技术网

Ios 在tableview中搜索栏作为标题-显示和消失

Ios 在tableview中搜索栏作为标题-显示和消失,ios,swift,ios11,swift4,Ios,Swift,Ios11,Swift4,我需要在我的tableview顶部放置一个搜索栏。我正在进行网络通话,当结果大于100时,我希望搜索栏出现,当结果小于100时,我不希望搜索栏出现。tableview位于VC的右侧,不占用整个视图控制器。我希望搜索栏作为标题位于表视图的顶部 我不能使用搜索控制器,因为在iOS 11中,当搜索栏处于活动状态时,使用搜索控制器会使搜索栏弹出到VC的顶部 我试图将tableviewheader设置为零以使其消失。但是很明显,我不能把球拿回来,因为我头球得分为零 self.rightDetailFilt

我需要在我的tableview顶部放置一个搜索栏。我正在进行网络通话,当结果大于100时,我希望搜索栏出现,当结果小于100时,我不希望搜索栏出现。tableview位于VC的右侧,不占用整个视图控制器。我希望搜索栏作为标题位于表视图的顶部

我不能使用搜索控制器,因为在iOS 11中,当搜索栏处于活动状态时,使用搜索控制器会使搜索栏弹出到VC的顶部

我试图将tableviewheader设置为零以使其消失。但是很明显,我不能把球拿回来,因为我头球得分为零

self.rightDetailFilterTableView.tableHeaderView = nil
self.rightDetailFilterTableView.sectionHeaderHeight = 0
我已将搜索栏放入故事板,如下图所示。这是将搜索栏添加为标题的正确方法吗

让它在tableview中显示和消失的最佳方法是什么?我试过很多不同的方法。它们要么留下一个空白的标题,要么做其他导致问题的事情。我还尝试使用header委托方法,但仍然不起作用


我没有使用tableview控制器,我使用的是普通的VC。我也没有使用搜索栏控制器,因为它在iOS 11中会导致问题。

以下是我在最近的一个项目中所做的工作。首先,我这样陈述了我的观点:

也就是说,搜索栏被添加到父视图而不是表视图。这允许我根据需要隐藏/显示它

接下来,我定义了两个可选的布局约束,一个确保tableview与安全区域的顶部对齐,优先级750;另一个将搜索栏的顶部与安全区域的顶部对齐;低于750的优先级将其隐藏在导航栏下方,高于750的优先级将其显示并向下推动表格视图

在代码中,我为安全区域顶部的搜索栏的布局约束创建了@IBOutlet,并根据需要更改其优先级:

@IBAction
func toggleSearchBar(_ sender: Any?) {
    if searchBarVisibleLayoutConstraint.priority.rawValue > 750.0 {
        searchBarVisibleLayoutConstraint.priority = UILayoutPriority(rawValue: 1.0)
        searchBar?.endEditing(true)
    } else {
        searchBarVisibleLayoutConstraint.priority = UILayoutPriority(rawValue: 999.0)
    }
    UIView.animate(withDuration: 0.3) {
        self.view.layoutIfNeeded()
    }
}
在我的例子中,导航栏是不透明的,后面的搜索栏不可见。您的案例可能会有所不同,因此您可能还希望剪裁父视图,或者在搜索栏不可见时对其进行alpha淡入淡出

祝你好运

请检查:

为我的
搜索栏创建了IBOutlet

@IBOutlet weak var testbar: UISearchBar!
在我的
视图中加载

override func viewDidLoad() {
    var contentOffset = tableView.contentOffset
    let showSearchBar = (results.count > 100)
    self.tableView.tableHeaderView?.isHidden = !(showSearchBar)
    if showSearchBar {
        contentOffset.y -= testbar.frame.size.height
    } else {
        contentOffset.y += testbar.frame.size.height
    }
    tableView.contentOffset = contentOffset
}

这是我的tableview情节提要

可能的重复将隐藏搜索栏,但隐藏时仍有空白。我试过这个方法,但不起作用。通过设置内容偏移量,当用户向上滚动时仍然会有空白。我没有完全使用这种方法,但这是我解决方案的灵感(LOL)。我使用堆栈视图来处理凌乱的约束内容。