2016-02-04 66 views
0

首先,我已经看过this问题,并试图实现它,但它没有改变任何东西,所以我只会在这段代码中显示我自己的尝试。无法修改自定义搜索栏的高度UITextField

就像问题说,我试图改变搜索栏内的UITextField的高度。我制作了一个自定义搜索栏以及一个自定义搜索控制器。

搜索栏类看起来像这样

class CustomSearchBar: UISearchBar { 

var preferredFont: UIFont! 
var preferredTextColor: UIColor! 

override func drawRect(rect: CGRect) { 
    // Drawing code 

    // Find the index of the search field in the search bar subviews. 
    if let index = indexOfSearchFieldInSubviews() { 
     // Access the search field 
     let searchField: UITextField = (subviews[0]).subviews[index] as! UITextField 


     // Set its frame. 
     //searchField.frame = CGRectMake(5.0, 5.0, frame.size.width - 10.0, frame.size.height - 10.0) 
     searchField.frame = CGRectMake(5.0, 5.0, frame.size.width, 100) 

     // Set the font and text color of the search field. 
     searchField.font = preferredFont 
     searchField.textColor = preferredTextColor 

     // Set the background color of the search field. 
     searchField.backgroundColor = barTintColor 
    } 

    let startPoint = CGPointMake(0.0, frame.size.height) 
    let endPoint = CGPointMake(frame.size.width, frame.size.height) 
    let path = UIBezierPath() 
    path.moveToPoint(startPoint) 
    path.addLineToPoint(endPoint) 

    let shapeLayer = CAShapeLayer() 
    shapeLayer.path = path.CGPath 
    shapeLayer.strokeColor = preferredTextColor.CGColor 
    shapeLayer.lineWidth = 2.5 

    layer.addSublayer(shapeLayer) 

    super.drawRect(rect) 
} 

init(frame: CGRect, font: UIFont, textColor: UIColor){ 
    super.init(frame: frame) 

    self.frame = frame 
    preferredFont = font 
    preferredTextColor = textColor 

    searchBarStyle = UISearchBarStyle.Prominent 
    translucent = false 
} 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
} 

func indexOfSearchFieldInSubviews() -> Int! { 
    var index: Int! 
    let searchBarView = subviews[0] 

    for var i=0; i<searchBarView.subviews.count; ++i { 
     if searchBarView.subviews[i].isKindOfClass(UITextField) { 
      index = i 
      break 
     } 
    } 

    return index 
} 

}

我的自定义searchController看起来像这样

class CustomSearchController: UISearchController, UISearchBarDelegate { 
var customSearchBar: CustomSearchBar! 
var customDelegate: CustomSearchControllerDelegate! 

init(searchResultsController: UIViewController!, searchBarFrame: CGRect, searchBarFont: UIFont, searchBarTextColor: UIColor, searchBarTintColor: UIColor){ 
    super.init(searchResultsController: searchResultsController) 

    configureSearchBar(searchBarFrame, font: searchBarFont, textColor: searchBarTextColor, bgColor: searchBarTintColor) 

} 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
} 

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?){ 
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
} 

func configureSearchBar(frame: CGRect, font: UIFont, textColor:UIColor, bgColor: UIColor){ 
    customSearchBar = CustomSearchBar(frame: frame, font: font, textColor: textColor) 

    customSearchBar.barTintColor = bgColor 
    customSearchBar.tintColor = textColor 
    customSearchBar.showsBookmarkButton = true 
    customSearchBar.setImage(UIImage(named: "recording.png"), forSearchBarIcon: UISearchBarIcon.Bookmark, state: UIControlState.Normal) 
    customSearchBar.setImage(UIImage(named:"record_tap.png"), forSearchBarIcon: UISearchBarIcon.Bookmark, state: UIControlState.Selected) 
    customSearchBar.showsCancelButton = false 

    customSearchBar.delegate = self 

} 

在我的视图控制器在那里我创建这个搜索栏我用下面的一段代码。这是被称为在我viewDidLoad中()

func configureCustomSearchController() { 
    customSearchController = CustomSearchController(searchResultsController: self, searchBarFrame: CGRectMake(0.0, 0.0, UIScreen.mainScreen().bounds.width, 100.0), searchBarFont: UIFont(name: "Futura", size: 18.0)!, searchBarTextColor: UIColor(red: 0.612, green: 0.984, blue: 0.533, alpha: 1), searchBarTintColor: UIColor.blackColor()) 

    customSearchController.customSearchBar.placeholder = "Search.." 
    tblSearchResults.tableHeaderView = customSearchController.customSearchBar 
    customSearchController.customDelegate = self 
} 

我能够改变整个搜索栏的框架见上面,我将它设置得100.但我无法改变的UITextField的高度我想做得更大。我也确定我到达了UITextView。当我改变drawRect函数中的颜色时,它会改变。只有身高是这里的问题。有人有任何线索我做错了什么或我需要做什么来实现这一点。

回答

1

我发现如果我将您的尺寸代码移动到layoutSubviews()中,我认为它按照您的预期工作。

override func layoutSubviews() { 
    // Find the index of the search field in the search bar subviews. 
    if let index = indexOfSearchFieldInSubviews() { 
     ... //Added red background 
    } 
} 

override func drawRect(rect: CGRect) {... 

我相信在drawRect()被调用时,布局的时间已经过去了。尽管如此,我不能真正评论这是否是最好的实现。

Reveal

+0

那实际工作和固定的我有感谢的另一个问题! 另一个快速问题。你知道如何改变书签图像大小吗?如果没有,我会就此提出一个新问题 – NoSixties

+0

总是最好问另一个问题。我不知道更改书签图像。如果你真的想要一个自定义的外观/感觉,它通常更容易,更易于维护,并且如果你只是自己构建,就不太可能在iOS更新上突破。 –

+0

我不知道我会如何建立自己的真正无法找到任何东西。我也已经创造了一个新的问题 – NoSixties