ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

https://i.stack.imgur.com/6I4uKm.png

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

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

在您添加代码的位置 hidesSearchBarWhenScrolling
将其设置为 s firstResponder 怎么样?
下面选择的答案在加载时对我有用,但我还想在使用 scrollView.setContentOffset(_:animated) 以编程方式滚动到顶部时重新显示搜索控制器。有人有建议吗?
@Jonathan hidesSearchBarWhenScrolling = false 将搜索栏放在 iOS 13 中的大标题上。知道我是否可以以某种方式更新它?
答案没有任何作用,有人解决了问题吗?(

G
Gobe

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

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 并没有达到我想要的效果,它使搜索栏处于活动状态(显示取消按钮等),而我只想让它可见。


谢谢,为我工作。虽然有趣的解决方案:)
此解决方案有效,但如果您还显示导航栏(如果导航栏先前隐藏)(即将此视图与搜索栏推送到导航堆栈上),则会有副作用。搜索栏将在导航栏动画时显示为静态。看起来很糟糕:(
如果您将第一部分放在 viewDidLoad 而不是 viewWillAppear 中,则不会
有人可以详细说明为什么这有效,为什么 viewDidLoad 中的 searchController.searchBar.isHidden = false 无效?后者对我来说似乎更合乎逻辑
这会导致 iOS 13 在从子屏幕返回时出现视觉错误。
c
craft

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

像这样:

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

没有设置方法'setIsActive:'
你是对的,@NikolayKrasnov。 isActive 是只读布尔值。您将希望使用 searchController.active = true
B
Bùi Đức Khánh

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

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

G
GaétanZ

在 iOS 13 上,@Jordan Wood 的回答不起作用。相反,我做了:

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

几乎!搜索栏会在视图出现后变为可见。这会惹恼用户。 :(
R
RakeshDipuna
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)
            )
    }
}

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅