iOS 13 UIBarButtonItem 使用 UISearchController 时不可点击且重叠 UINavigationBars

iosNBA

1个回答

写回答

WilM

2025-06-14 19:20

+ 关注

IOS
IOS

IOS 13带来了许多令人兴奋的新功能和改进,其中之一是使用UISearchController来实现搜索功能。然而,一些开发者在使用UISearchController时遇到了一个问题:当它们与UINavigatioNBArs一起使用时,UIBarButtonItem变得不可点击并且重叠在一起。

这个问题可能会让开发者感到困惑和沮丧,因为他们希望能够自定义导航栏并在搜索控制器中添加一些功能按钮。幸运的是,这个问题有一个相对简单的解决方案,让我们一起来看看。

首先,让我们解释一下为什么会出现这个问题。在IOS 13中,导航栏的外观发生了变化,它现在默认具有大标题和大的返回按钮。这导致搜索控制器的布局出现问题,因为它假设导航栏的高度是固定的。结果,UIBarButtonItem被压缩在一起,无法点击。

要解决这个问题,我们可以通过自定义导航栏的外观来恢复UIBarButtonItem的可点击性。具体来说,我们可以通过设置导航栏的prefersLargeTitles属性为false来禁用大标题,以及通过设置导航栏的层次结构来调整UIBarButtonItem的布局。

下面是一个示例代码,展示了如何使用UISearchController和UIBarButtonItem来实现搜索功能,并解决了上述问题:

Swift

import UIKit

class ViewController: UIViewController {

let searchController = UISearchController(searchResultsController: nil)

override func viewDidLoad() {

super.viewDidLoad()

// 设置导航栏的外观

navigationController?.navigatioNBAr.prefersLargeTitles = false

// 设置搜索控制器

searchController.searchResultsUpdater = self

searchController.obscuresBackgroundDuringPresentation = false

searchController.searchBar.placeholder = "搜索"

navigationItem.searchController = searchController

definesPresentationContext = true

// 添加功能按钮

let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addButtonTapped))

navigationItem.rightBarButtonItem = addButton

}

@objc func addButtonTapped() {

// 添加按钮被点击的响应

}

}

extension ViewController: UISearchResultsUpdating {

func updateSearchResults(for searchController: UISearchController) {

// 更新搜索结果

}

}

在上面的示例中,我们在viewDidLoad方法中设置了导航栏的外观,将prefersLargeTitles属性设置为false,从而禁用了大标题。然后,我们创建了一个UISearchController实例,并将其设置为navigationItem的searchController属性。最后,我们创建了一个UIBarButtonItem实例,并将其设置为navigationItem的rightBarButtonItem属性。

通过这样的设置,我们成功解决了IOS 13中UIBarButtonItem不可点击且重叠UINavigatioNBArs的问题。现在,开发者可以自由地使用UISearchController和UIBarButtonItem来实现他们的需求,并为用户提供更好的搜索体验。

解决UIBarButtonItem不可点击且重叠UINavigatioNBArs问题的方法

在上述示例中,我们提到了一种解决UIBarButtonItem不可点击且重叠UINavigatioNBArs问题的方法。现在,让我们更详细地说明一下这个方法。

1. 设置导航栏的外观

首先,我们需要设置导航栏的外观,将prefersLargeTitles属性设置为false。这样可以禁用大标题,使导航栏恢复到IOS 12之前的外观。在示例代码中,我们在viewDidLoad方法中使用navigationController?.navigatioNBAr.prefersLargeTitles = false来完成此操作。

2. 设置搜索控制器

接下来,我们需要创建一个UISearchController实例,并将其设置为navigationItem的searchController属性。这样可以将搜索控制器与导航栏关联并在导航栏中显示搜索栏。在示例代码中,我们设置了searchResultsController为nil,这意味着搜索结果将在当前视图控制器中显示。

3. 添加功能按钮

最后,我们可以通过创建一个UIBarButtonItem实例,并将其设置为navigationItem的rightBarButtonItem属性,来添加功能按钮。在示例代码中,我们创建了一个名为addButton的UIBarButtonItem实例,并将其设置为导航栏的右侧按钮。你可以根据自己的需求添加其他的功能按钮。

通过上述步骤,我们成功解决了IOS 13中UIBarButtonItem不可点击且重叠UINavigatioNBArs的问题。现在,开发者可以自由地使用UISearchController和UIBarButtonItem来实现他们的需求,并为用户提供更好的搜索体验。

在本文中,我们介绍了IOS 13中使用UISearchController时UIBarButtonItem不可点击且重叠UINavigatioNBArs的问题,并提供了一个解决方案。通过自定义导航栏的外观和调整UIBarButtonItem的布局,我们成功解决了这个问题,并为开发者提供了更好的搜索功能。

希望本文对那些遇到类似问题的开发者有所帮助。如果你有任何疑问或建议,请随时在评论区留言。感谢阅读!

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号