在导航栏中显示搜索栏而不在iOS 11上滚动

时间:2017-09-15 12:42:22

标签: ios uinavigationitem uisearchcontroller

我将UISearchController附加到iOS 11上UITableViewController的navigationItem.searchController属性。这很好用:我可以使用漂亮的iOS 11风格搜索栏。

但是,我想在发布时使搜索栏可见。默认情况下,用户必须在表格视图中向上滚动才能看到搜索栏。有谁知道这怎么可能?

enter image description here enter image description here

左:启动后的默认情况。右:搜索栏可见(通过向上滚动)。我希望在发布后可以看到搜索栏,如右侧屏幕截图所示。

我已经发现,通过将导航项的属性hidesSearchBarWhenScrolling设置为false,可以使搜索栏可见。但是,这会导致搜索栏始终可见 - 即使向下滚动 - 这也不是我想要的。

6 个答案:

答案 0 :(得分:138)

以下内容首先使滚动条可见,然后在滚动时允许它隐藏:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if #available(iOS 11.0, *) {
        navigationItem.hidesSearchBarWhenScrolling = false
    }
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    if #available(iOS 11.0, *) {
        navigationItem.hidesSearchBarWhenScrolling = true
    }
}

使用isActive没有做我想要的,它使滚动条处于活动状态(显示取消按钮等),当我想要的只是它可见时。

答案 1 :(得分:3)

将searchController添加到isActive后,您可以将属性true设置为navigationItem

就像这样:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    searchController.isActive = true
}

答案 2 :(得分:2)

对我来说,它在viewDidLoad()方法中添加了以下几行后就起作用了:

navigationController?.navigationBar.prefersLargeTitles = true
navigationController!.navigationBar.sizeToFit()

答案 3 :(得分:1)

以下使searchBar成为第一响应者:

var authorizepolicy= new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .RequireRole("Admin", "SuperUser")
        .Build();

services.AddMvc(options =>
{
    options.Filters.Add(new AuthorizeFilter(authorizepolicy));
});

答案 4 :(得分:0)

在iOS 13上,@ Jordan Wood的答案无效。 相反,我做了:

df=pd.read_csv('demand.csv').dropna()

答案 5 :(得分:0)

For (iOS 13.0, *) and SwiftUI
<块引用>

navigationController?.navigationBar.sizeToFit()

Example:

struct SearchBarModifier: ViewModifier {
        let searchBar: SearchBar
        func body(content: Content) -> some View {
        content
            .overlay(
                ViewControllerResolver { viewController in
                    viewController.navigationItem.searchController = self.searchBar.searchController
                    viewController.navigationController?.navigationBar.sizeToFit()

                }
                .frame(width: 0, height: 0)
            )
    }
}