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

时间:2015-05-26 17:40:02

标签: ios swift ios8 uisearchbar

我想更改搜索栏的范围按钮的高度。我使用调整的分段控件,并希望使范围按钮看起来相同。下面是我的范围按钮的屏幕截图,以及我想要匹配的分段控件的另一个屏幕截图。

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

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

我当前的搜索栏范围按钮: enter image description here

我的分段控件: enter image description here

2 个答案:

答案 0 :(得分:5)

分段控件不会在UISearchBar界面中公开。因此,您无法控制分段控件的帧。如果你真的想要改变框架高度,除了遍历subViews以找到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
}

答案 1 :(得分:0)

您可以访问左侧图片视图,如下图所示,它是搜索栏的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)
        }
}