swift 搜索栏取消按钮仅在iPad上不可见

6l7fqoea  于 2023-04-28  发布在  Swift
关注(0)|答案(4)|浏览(281)

首先,我想说我在Swift中没有找到任何好的答案。我创建了search bar。单击按钮时显示,取消时隐藏searchbar。它工作正常,取消按钮在所有iPhones上可见,但由于某种原因iPad上不。是什么原因造成的?
这就是我创建searchbar的方式:

//Create searchbar
    func createSearchBar(){

        searchBar.showsCancelButton = true
        searchBar.tintColor = UIColor(red:0.184, green:0.996, blue:0.855, alpha:1.00)
        searchBar.placeholder = "Search brands"
        searchBar.delegate = self


        searchBar.hidden =  false
        searchBar.alpha = 0

        navigationItem.titleView = searchBar
        navigationItem.setLeftBarButtonItem(menuButton, animated: true)
        navigationItem.setRightBarButtonItem(searchButtton, animated: true)

        UIView.animateWithDuration(0.5, animations: {
            self.searchBar.alpha = 1
            }, completion: { finished in
                self.searchBar.becomeFirstResponder()
        })

    }
cdmah0mi

cdmah0mi1#

我的项目也面临着同样的问题。我在苹果论坛上发帖,很多开发者都评论说这是一个xcode bug。所以我为iPad浏览量手动添加了取消按钮

func configureCancelBarButton() {
    let cancelButton = UIBarButtonItem()
    cancelButton.image = UIImage(named: "cancelButton")
    cancelButton.action = #selector(viewController.ipadCancelButton(_:))
    cancelButton.target = self
    self.navigationItem.setRightBarButtonItem(cancelButton, animated: true)
}

我之前已经发布了关于这个问题的答案。Check that too .:)

30byixjq

30byixjq2#

https://developer.apple.com/documentation/uikit/uisearchbar/1624283-showscancelbutton
对于在iPad上运行的应用,将忽略此属性的值,并且不显示取消按钮。
Apple在文档中添加了此内容!

nwnhqdif

nwnhqdif3#

如果您不将UISearchbar用作NavigationBarItem,则UISearchbar的取消按钮将在iPad上工作。

hpxqektj

hpxqektj4#

UISearchBar在iPad和iPhone上用作navigationItem时的工作方式不同。在iPad上,取消按钮被“返回”按钮取代,而在iPhone上,取消按钮仍然显示为按钮。*

1.在iPad上,如果您将UISearchBar用作UINavigationBar中的navigationItem,则不会显示取消按钮。但是,如果您在任何其他上下文中(例如在视图控制器中)使用UISearchBar,则取消按钮将显示并按预期运行。
1.在iPhone上,UISearchBar既可以用作navigationItem,也可以用作视图控制器。在这两种情况下,将显示取消按钮,并按预期运行。
1.当UISearchBar用作iPhone上的navigationItem时,当用户开始编辑搜索栏时,取消按钮将显示为右栏按钮项。这允许用户容易地取消搜索并返回到前一屏幕。
在iPad上,如果您将UISearchBar用作UINavigationBar中的navigationItem,则不会显示取消按钮。但是,如果您在任何其他上下文中(例如在视图控制器中)使用UISearchBar,则取消按钮将显示并按预期运行。

func setupCancelButton() {
let cancelButton = UIButton(type: .system)
 // Set button title
cancelButton.setTitle("Cancel", for: .normal)
 // Add target
cancelButton.addTarget(self, action: #selector(cancelButtonTapped), for: .touchUpInside)
cancelButton.translatesAutoresizingMaskIntoConstraints = false

let image = UIImage(named: "cancel_icon")?.withRenderingMode(.alwaysTemplate)
// Set image 
cancelButton.setImage(image, for: .normal)
cancelButton.tintColor = .black

searchBar.addSubview(cancelButton)
searchBar.setShowsCancelButton(false, animated: false)

NSLayoutConstraint.activate([
    cancelButton.topAnchor.constraint(equalTo: searchBar.topAnchor, constant: 0),
    cancelButton.bottomAnchor.constraint(equalTo: searchBar.bottomAnchor, constant: 0),
    cancelButton.trailingAnchor.constraint(equalTo: searchBar.trailingAnchor, constant: -8),
    cancelButton.widthAnchor.constraint(equalToConstant: 50)
])}

@objc func cancelButtonTapped() {
searchBar.text = ""
searchBar.resignFirstResponder()

}
从viewDidLoad调用上面的函数来设置UISearchBar

相关问题