在 iOS 中更改 UISearchBar 范围按钮的高度?

Change height of scope buttons of UISearchBar in iOS?

我想更改搜索栏范围按钮的高度。我正在使用调整后的分段控件,并想让示波器按钮看起来一样。下面是我的范围按钮的屏幕截图和我想要匹配的分段控件的另一个屏幕截图。

这是我用于分段控件的代码,可能需要重新应用于搜索栏范围按钮,但不知道如何:

    filterSegmentedControl.frame = CGRect(
        x: filterSegmentedControl.frame.origin.x,
        y: filterSegmentedControl.frame.origin.y,
        width: filterSegmentedControl.frame.size.width,
        height: 22)

我当前的搜索栏范围按钮:

我的分段控件:

分段控件未从 UISearchBar 界面中公开。因此,您无法控制其中的分段控件的框架。如果您真的想更改框架高度,除了遍历子视图以找到 UISegmentedControl 然后手动为其设置框架外,我看不到任何其他方法。

这是 UIView 上的一个小助手扩展,它将帮助您遍历 UISearchBar 中的子视图层次结构以找到 UISegmentedControl。

extension UIView {

    func traverseSubviewForViewOfKind(kind: AnyClass) -> UIView? {
        var matchingView: UIView?

        for aSubview in subviews {
            if aSubview.dynamicType == kind {
                matchingView = aSubview
                return matchingView
            } else {
                if let matchingView = aSubview.traverseSubviewForViewOfKind(kind) {
                    return matchingView
                }
            }
        }

        return matchingView
    }
}

然后您可以使用此方法手动为找到的分段控件设置框架,就像这样,

if let segmentedControl = searchBar.traverseSubviewForViewOfKind(UISegmentedControl.self) {
  var segmentedControlFrame = segmentedControl.frame
  segmentedControlFrame.size.height = 70
  segmentedControl.frame = segmentedControlFrame
}

您可以访问左图视图,如下所示,它是搜索栏的 UITextField 的子视图

if let textField: UITextField = self.searchBar?.valueForKey("searchField") as? UITextField {
 if let searchIconImageView = textField.leftView as? UIImageView {
            searchIconImageView.frame = CGRect(x:0,y:0,width:14,height:14)
        }
}