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

4

首先,我想说在Swift中没有找到任何好的答案。我创建了一个search bar。点击按钮它就会显示,在取消时隐藏searchbar。它在所有上正常工作,但由于某些原因,在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()
        })


    }
4个回答

12

我遇到了与我的项目有关的同样问题。我在苹果论坛上发帖,许多开发者评论说这是Xcode的 bug。因此我手动为iPad视图添加了取消按钮。

面对同样的项目问题,在苹果论坛上发布了帖子,得到了许多开发人员的回复,称这是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)
}

我之前回答过这个问题。 也可以查看这个链接。 :)


7

4
为什么iPad上没有取消按钮? - Senõr Ganso

2

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

在iPad上,如果您将UISearchBar用作UINavigationBar中的navigationItem,则取消按钮将不会显示。但是,如果您在任何其他上下文中使用UISearchBar,例如在视图控制器中,则取消按钮将显示并按预期工作。
在iPhone上,UISearchBar可以同时用作navigationItem和视图控制器中。在这两种情况下,取消按钮都将显示并按预期工作。
当在iPhone上将UISearchBar用作navigationItem时,当用户开始编辑搜索栏时,取消按钮将显示为右侧栏按钮项。这使用户可以轻松取消搜索并返回到上一个屏幕。
在iPad上,如果您将UISearchBar用作UINavigationBar中的navigationItem,则取消按钮将不会显示。但是,如果您在任何其他上下文中使用UISearchBar,例如在视图控制器中,则取消按钮将显示并按预期工作。
func setupCancelButton(){ let cancelButton = UIButton(type:.system) //设置按钮标题 cancelButton.setTitle(“取消”,for:.normal) //添加目标 cancelButton.addTarget(self,action:#selector(cancelButtonTapped),for:.touchUpInside) cancelButton.translatesAutoresizingMaskIntoConstraints = false let image = UIImage(named:“cancel_icon”)?.withRenderingMode(.alwaysTemplate) //设置图像 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。

0

如果您没有将UISearchbar用作NavigationBarItem,则iPad上的取消按钮将在UISearchbar中起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接